TSQL:可变范围和EXEC()

Joe*_*oel 1 sql t-sql sql-server

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

exec('
select '+@test+'
')
Run Code Online (Sandbox Code Playgroud)

返回:

列名称"VALUE"无效.

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

Tom*_*lak 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
Run Code Online (Sandbox Code Playgroud)

产量:

(no column name)
VALUE
Run Code Online (Sandbox Code Playgroud)