SQL Server:VAR值到列名

时间:2018-06-27 10:38:00

标签: sql-server

我正在将旧系统迁移到新系统,并且确实发生了一些非常愚蠢的事情,但是无论如何我都需要这样做;

UPDATE tblSomething 
SET Column3 = 'Something' 
WHERE ID = 58

通过使用类似这样的东西;

DECLARE @No INT = 3

UPDATE tblSomething 
SET Column+@No = 'Something 
WHERE ID = 58

因此,我尝试使用一个值作为列名。请帮助...

1 个答案:

答案 0 :(得分:2)

您不能直接将变量用作对象名,而必须使用Dynamic SQL。

DECLARE @No INT = 3
DECLARE @DynamicSQL VARCHAR(MAX) = '
    UPDATE 
        tblSomething 
    SET 
        Column' + + CONVERT(VARCHAR(10), @No) + ' = ''Something'' WHERE ID = 58'


PRINT (@DynamicSQL)

EXEC (@DynamicSQL)

当心在动态sql上插入不安全的值(SQL注入)。整数并没有太大问题,但是对于数据库,表或列,您应该使用QUOTENAME()并将VARCHAR的长度限制为一个合适的值。