sql server 存储过程 表变量名无法用在查询字符串中
--定义表变量并插入数据declare@userdepttable(....)insert....--直接查询,此查询语句可以成功select*from@userDept...
--定义表变量并插入数据
declare @userdept table(....)
insert ....
--直接查询,此查询语句可以成功
select * from @userDept
--定义一个字符串,存放查询语句,执行该查询语句失败:Must declare the scalar variable "@UserDept".
declare @sSql varchar(max0
set @sSql='select * from @userDept'
exec (sSql)
因为要使用动态Sql,所以必须要把@userDept 放在字符串里,请教各位大神,该如何在查询语句中引用表变量的名字? 展开
declare @userdept table(....)
insert ....
--直接查询,此查询语句可以成功
select * from @userDept
--定义一个字符串,存放查询语句,执行该查询语句失败:Must declare the scalar variable "@UserDept".
declare @sSql varchar(max0
set @sSql='select * from @userDept'
exec (sSql)
因为要使用动态Sql,所以必须要把@userDept 放在字符串里,请教各位大神,该如何在查询语句中引用表变量的名字? 展开
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语句,直接使用临时表会比较方便些。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询