TSQL:可变范围和EXEC()

时间:2009-03-24 15:34:51

标签: sql sql-server tsql

declare @test varchar(20)
set @test = 'VALUE'

exec('
select '+@test+'
')

返回:

  

列名称'VALUE'无效。

是否有另一种方法可以在select语句中显示变量值?

3 个答案:

答案 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 + ''' ')