执行动态SQL,exec和exec sp_executesql

两者都可以执行动态sql
sp_executesql  可以在动态 sql 中使用变量,并且将变量输出
exec 则只能执行动态 sql 和 存储过程,也可以使用表变量,执行时需要加括号,唯一不足就是不可以输出变量
create table t_test(id int,name varchar(10),value int)
declare @v_count int,@n_avgnum numeric,@v_tablename nvarchar(30),@v_sql nvarchar(4000),@v_id int
set @v_id=1
set @v_tablename='T_TEST'
begin
	set @v_sql = 'select * from '+@v_tablename
	exec(@sql)
	set @v_sql='select @v_count=count(1),@n_avgnum=avg(value) from '+@v_tablename+ ' where id='+@v_id
	exec sp_executesql @v_sql,
						N'@v_count numeric output,@n_avgnum numeric output',
						@v_count output,@n_avgnum  output -- 输出参数
	select @v_count,@n_avgnum
end

另外例子:

DECLARE @V_TEST_COUNT INT,@str_sql NVARCHAR(4000)
	SET @str_sql = N'select @tmp_counts = count(1)'
             + N'  FROM sys.objects t WHERE t.type='''+N'U'+N''' AND t.name LIKE ''T_TEST' +CAST(@yearmn AS VARCHAR(30))+ N'%''';

	EXEC sp_executesql @str_sql,N'@tmp_counts int output',
                         @tmp_counts = @V_TEST_COUNT OUTPUT;      --table cnt


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值