Sql动态语句中给变量赋值
declare @a varchar(20)
declare @Sql varchar(2000)
set @Sql='select @a=a from tb'
exec @Sql
结果出现错误: 必须声明变量 @a
原因:变量与动态语句不能共享
一.我想到的方法是用临时表来代替变量,暂时存储数据.
把数据写到到临时表中,,再从临时表中取到想要的数据.
1 create table #tt
2 (
3 a varchar(20)
4 )
5
6 declare @sql varchar(2000)
7 set @sql='insert into #tt(a) select a from tb'
8 exec(@sql)
临时表在动态语句中是能实现共享的,,所以执行动态后
进行查询临时表是能找到动态语句时插入的数据.
二. 在网上看到的还有种方法:就是把变量的声明也都放到动态语句中
exec('declare @t int;
set @t=1;
print(@t)')
这种方法的一个不好之处就是无法在动态语句中使用外部传进来的参数.