动态SQL怎么写

jesons 2019-04-04 12:45:45
下面的代码如何改? declare @表名称 varchar(20) ,@表字段 varchar(20) select @表名称 = tbname,@表字段 = field from mytb where nid=5 if exists(select * from @表名称 where @表字段=25) begin -- 这里是一段代码,不写了 end
...全文
333 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 版主 2019-04-06
  • 打赏
  • 举报
回复
declare @表名称 varchar(20) ,@表字段 varchar(20)
select @表名称 = tbname,@表字段 = field from mytb where nid=5
--定义标识变量 和 sql 字符串变量
DECLARE @flag bit,@sql nvarchar(max)
set @flag = 0
set @sql = '
if exists(select * from '+@表名称+' where '+@表字段+'=25)
begin
	set @flag = 1
end
'
--执行动态 SQL
EXEC sp_executesql @sql,N'@flag bit out',@flag out

if @flag = 1
begin
	-- 这里是一段代码,不写了
end
如果内部要执行的代码很简单也可以直接:
declare @表名称 varchar(20) ,@表字段 varchar(20)
select @表名称 = tbname,@表字段 = field from mytb where nid=5
--定义标识变量 和 sql 字符串变量
DECLARE @flag bit,@sql nvarchar(max)
set @flag = 0
set @sql = '
if exists(select * from '+@表名称+' where '+@表字段+'=25)
begin
	-- 这里是一段代码,不写了
end
'
--执行动态 SQL
EXEC (@sql)
jesons 2019-04-06
  • 打赏
  • 举报
回复
谢谢!

不过我很想知道 exists() 能否直接动态编写呢
leo_lesley 2019-04-04
  • 打赏
  • 举报
回复
-- 试试这个是不是你想要的 DECLARE @OUT_Nums INT,@IN_Score INT,@Sql NVARCHAR(MAX) DECLARE @表名称 varchar(20) ,@表字段 varchar(20) SET @sql = 'select @Nums=COUNT(1) from ' + @表名称 + ' where ' + @表字段 + ' =25 ' -- 带返回值得动态sql EXEC SP_EXECUTESQL @sql,N' @Nums INT OUT , @表名称 varchar , @表字段 varchar ' , @OUT_Nums OUTPUT , @表名称 , @表字段 SELECT @OUT_Nums AS '人数' -- 判断结果集的个数 if isnull(@OUT_Nums,0) > 0 begin -- 这里是一段代码,不写了 end
leo_lesley 2019-04-04
  • 打赏
  • 举报
回复
-- 给你个例子 DECLARE @OUT_Nums INT,@IN_Score INT,@Sql NVARCHAR(MAX) SET @IN_Score = 90 SET @sql = 'SELECT @Nums=COUNT(1) FROM t_student WHERE Score >= @Score' -- 带返回值得动态sql EXEC SP_EXECUTESQL @sql,N'@Nums INT OUT,@Score INT',@OUT_Nums OUTPUT,@IN_Score SELECT @OUT_Nums AS '人数'

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧