--用动态SQL执行,example
exec('IF EXISTS (SELECT 1 FROM '+@dd+'
WHERE 销售编号 LIKE '+@bj+'SUBSTRING(CONVERT(varchar(8),
GETDATE(), 112), 1, 8)''%''')
exec('IF EXISTS (SELECT 1 FROM '+@dd+'
WHERE 销售编号 LIKE '+@bj+'SUBSTRING(CONVERT(varchar(8),
GETDATE(), 112), 1, 8)''%''')
解决方案 »
- Invalid object name 'week'?
- [在線等]判断字符是否存在字符串中[在線等]
- 急!!!!四舍五入问题!!
- 多表连接update 的其他方法
- sql怎么样删除表中指定字段以外的所有字段?
- 全文索引问题
- 嘿嘿 大虾门解决下呵呵
- 各位高手:求教如何将excel文件导到SQLServer中,还有如何将导数的数据,进行时实的处理.如两个相关的表做成view?????
- 向高手请教一个VC-SQL数据库编程问题:
- 高分求教 C(Sql Server 7.0)/S 结构中:C端的配置、S端的配置以及PROXY的创建。目前最高能给56分,先给50,解决后再加150分。
- 一个排序问题?
- []简单问题,关于取最大值
------------------------------------------------------------------------------------
1、:普通SQL语句可以用Exec执行
eg:
Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
2、字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意,加号前后的单引号的边上加空格 --当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名 declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
3、 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls) --如何将exec执行结果放入变量中?
declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
@bj varchar(2),
@dd varchar(20)
AS
declare @sql varchar(2000)
set @sql='IF EXISTS (SELECT 1
FROM '+@dd+' WHERE 销售编号 LIKE '+@bj +' SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8) + ''%'') BEGIN
SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
FROM '+@dd+' WHERE 销售编号 LIKE '+@bj +' SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8)
+ ''%'' END ELSE BEGIN
SELECT TOP 1 CONVERT(numeric(11,0), CONVERT(varchar(8), GETDATE(), 112) + ''000'', 112) + 1 AS 单据号
FROM '+@dd+' END'
exec(@sql)
GO
declare @tableName varchar(20)
set @tableName='T'
exec('select * from '+@tableName+'')
第 5 行: ' +@tableName+ ' 附近有语法错误。
@bj varchar(2),
@dd varchar(20)
AS
declare @sql varchar(2000)
set @sql='IF EXISTS (SELECT 1
FROM '+@dd+' WHERE 销售编号 LIKE '+@bj +' SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8) + ''%'') BEGIN
SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
FROM '+@dd+' WHERE 销售编号 LIKE '+@bj +' SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8)
+ ''%'' END ELSE BEGIN
SELECT TOP 1 CONVERT(numeric(11,0), CONVERT(varchar(8), GETDATE(), 112) + ''000'', 112) + 1 AS 单据号
FROM '+@dd+' END'
exec(@sql)
GO
这段代码可以执行的,但怎么返回结果呀
@bj varchar(2),
@dd varchar(20)
AS
BEGIN
declare @i int
declare @s nvarchar(4000)
set @s = N'SELECT @i=1 FROM '+@dd
+ N' WHERE 销售编号 LIKE '''+@bj
+ N'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%'''
exec sp_executesql @s,N'@i int out',@i out if @i=1
BEGIN
exec('SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
FROM ' +@dd+' WHERE 销售编号
LIKE '''+@bj+'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%''')
END
ELSE
exec('SELECT TOP 1 CONVERT(numeric(11,0),CONVERT(varchar(8),GETDATE(),112)+''000'',112)+1 AS 单据号
FROM '+@dd)
END
GO
@bj varchar(2),
@dd varchar(20)
AS
declare @sql varchar(2000)
set @sql='IF EXISTS (SELECT 1
FROM '+@dd+' WHERE 销售编号 LIKE '+@bj +' SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8) + ''%'') BEGIN
SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
FROM '+@dd+' WHERE 销售编号 LIKE '+@bj +' SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8)
+ ''%'' END ELSE BEGIN
SELECT TOP 1 CONVERT(numeric(11,0), CONVERT(varchar(8), GETDATE(), 112) + ''000'', 112) + 1 AS 单据号
FROM '+@dd+' END'
exec(@sql)
GO
@bj varchar(2),
@dd varchar(20)
AS
BEGIN
declare @i int
declare @s nvarchar(4000)
set @s = N'SELECT @i=1 FROM '+@dd
+ N' WHERE 销售编号 LIKE '''+@bj
+ N'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%'''
exec sp_executesql @s,N'@i int out',@i out if @i=1
BEGIN
exec('SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
FROM ' +@dd+' WHERE 销售编号
LIKE '''+@bj+'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%''')
END
ELSE
exec('SELECT TOP 1 CONVERT(numeric(11,0),CONVERT(varchar(8),GETDATE(),112)+''000'',112)+1 AS 单据号
FROM '+@dd)
END
GO=========================================================
我的回复,尽可能为你分忧解难!
BLOG:blog.csdn.net/softj --欢迎光临,有更多信息等着你!
QQ群:8476022专研数据库 --大家进来聊一聊!
MSN:[email protected] --这不常用!
Mail:[email protected] --有什么问题可以和我来EMAIL!
=========================================================