sql server 存储过程 表变量名无法用在查询字符串中

2024-12-05 06:34:52
推荐回答(1个)
回答1:

要注意一点: 用execute执行的动态SQL中是无法直接使用外部所定义的变量的(就好像执行动态SQL内与外是两个不同的会话。用存储过程sp_executesql倒是可以传递其他标量类型的参数,但是也无法传递表变量)。而你要实现的功能是在执行动态SQL之前,已经把数据查询到一个表变量中了,然后要在动态SQL中再查询此表变量,目前来说是不能实现的。

可以使用临时表,或者游标,这两个可以在动态SQL中保持有效状态。

使用游标的示例如下:

declare @tb table (username nvarchar(20))
insert into @tb
select 'Andy'
union
select 'Jack'
declare cur cursor for
select top 10 username from @tb
declare @sql nvarchar(1000), @username nvarchar(20)
set @sql =  'open cur
fetch next from cur
into @v_user_name'
execute sp_executesql @sql, N'@v_user_name nvarchar(20) output', @username out
close cur
deallocate cur
select @username

而对于你的要在动态SQL中执行select语句,直接使用临时表会比较方便些。