动态SQL在subselect中使用变量

时间:2018-08-13 10:08:19

标签: sql dynamic-sql

我试图在我的update语句中使用变量,但是由于某些原因,我不明白它会导致错误。

以下代码有效:

declare @sql nvarchar(max)
set @sql='update valuetable set waarde=(select top 1 firstname from DimEmployee where firstname not like ''%[0-9]%'' )'
exec (@sql)

如果我使用以下代码将firstname和DimEmployee更改为变量:

declare @column nvarchar(max);
declare @table nvarchar(max);
declare @sql nvarchar(max)
set @column='firstname';
set @table='dbo.dimEmployee'
set @sql='update valuetable set waarde=(select top 1 '+ @column + 'from '+@table+' where '+@column+' not like ''%[0-9]%'')'
exec (@sql)

它给出以下错误:'。'附近的语法不正确。在第1行

有人可以向我解释我在做错什么,是否有解决我的问题的方法?

1 个答案:

答案 0 :(得分:1)

您应该打印出SQL以查看实际运行的内容。例如,很明显,from前缺少空格是一个问题:

set @sql = '
update valuetable
    set waarde = (select top 1 '+ @column + ' from ' + @table + ' where ' + @column + ' not like ''%[0-9]%'')
';