代码之家  ›  专栏  ›  技术社区  ›  Kiel

SQL Server:列名的var值

  •  0
  • Kiel  · 技术社区  · 6 年前

    我正在把旧的系统换成新的,有一些非常愚蠢的事情正在发生,但无论如何我需要这样做;

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

    使用这样的东西;

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

    所以我试图使用一个值作为列名。请帮忙…

    1 回复  |  直到 6 年前
        1
  •  2
  •   EzLo tumao kaixin    6 年前

    不能直接将变量用作对象名,必须为此使用动态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 长度合适。