declare @test varchar(20)
set @test = 'VALUE'
exec('
select '+@test+'
')
返回:
列名称'VALUE'无效。
是否有另一种方法可以在select语句中显示变量值?
答案 0 :(得分:8)
干净的替代方法是使用sp_executesql()及其处理参数化语句的能力:
DECLARE @test VARCHAR(20)
DECLARE @stmt NVARCHAR(100)
DECLARE @parm NVARCHAR(100)
SET @stmt = N'SELECT @val' /* statement definition */
SET @parm = N'@val VARCHAR(20)' /* parameters definition */
SET @test = 'VALUE'
EXECUTE sp_executesql @stmt, @parm, @val = @test
收率:
(no column name)
VALUE
答案 1 :(得分:3)
您不需要在此上下文中使用Exec 如果您正在进行直接分配,可以使用
Set @test = 'VALUE'
并显示该值,只需选择它而不指定值
Select @test
答案 2 :(得分:3)
cmsjr有一个关于不需要exec的观点。但假设您发布了问题的简化版本,并且exec是一项要求:
没有名为“value”的列,因为没有表格。如果你只是想让它打印value
,你需要用引号括起来,所以它在exec调用中看起来像一个字符串文字:
exec(' select ''' + @test + ''' ')