当我想将变量的值传递给另一个变量时,我遇到了问题。
declare @column varchar(255);
set @column = 'cheesecake';
declare @tmp varchar(255);
set @tmp = (select @column from TEST where id = 1);
但在这种情况下,@tmp
不具有该表的值,而是@column
变量的名称。我用动态sql尝试了它,但是我遇到了语法错误。
declare @column varchar(255);
set @column = 'cheesecake';
declare @tmp varchar(255);
set @tmp = exec('select ' + @column + ' from TEST where id = 1');
如何解决@tmp
变量包含查询值?
答案 0 :(得分:1)
EXEC在不同的上下文中执行,因此无需轻松共享变量。您可以使用sp_executesql
DECLARE
@language nvarchar(255),
@translation nvarchar(255),
@statement nvarchar(255)
SET @language = N'norwegian'
SET @statement = 'select @translation='+@language+' from Translations where id = 1'
EXEC sp_executesql
@statement,
N'@translation nvarchar(255) OUTPUT',
@translation OUTPUT
SELECT @translation
答案 1 :(得分:-1)
AFAIK,不能使用`exec直接赋值给变量。解决问题的方法是创建一个表变量来存储动态查询的结果,然后使用表变量设置第二个变量的值,如下所示:
declare @column varchar(255);
set @column = 'cheesecake';
declare @tmp varchar(255);
declare @query nvarchar(255) = N'select ' + @column + N' from TEST where id = 1'
declare @tbl table(tmp varchar(255)) --Intermediate Table variable
insert into @tbl --Insert dynamic query results here
exec sp_executesql @query
select top 1 @tmp = tmp from @tbl --Assign value here
select @tmp
编辑:我有所纠正。 This答案显示了如何通过在动态查询中使用OUTPUT
参数将动态SQL结果分配给变量。