使用case的sql update table

时间:2014-11-12 04:18:43

标签: sql

UPDATE [Current]  
SET   
    C_OS = CASE WHEN [Current].[OS] <> [viLastRecord].[OS] THEN '1' END,  
    C_VER = CASE WHEN [Current].[VER] <> [viLastRecord].[VER] THEN '1' END  
WHERE
    [Current].VHOST = viLastRecord.VHOST AND  
    [Current].HOSTNAME = viLastRecord.HOSTNAME

如果我运行此查询,则出现以下错误:

  

Msg 4104,Level 16,State 1,Line 1
  无法绑定多部分标识符“viLastRecord.VHOST”   消息4104,级别16,状态1,行1   无法绑定多部分标识符“viLastRecord.HOSTNAME”。

1 个答案:

答案 0 :(得分:2)

您需要join,因为viLastRecord是一个表,并且未在查询中定义。

从语法判断,看起来您正在使用SQL Server。所以,你可以试试这个:

UPDATE c 
    SET C_OS = (CASE WHEN c.[OS] <> vlr.[OS] THEN '1' END),  
        C_VER = (CASE WHEN c.[VER] <> vlr.[VER] THEN '1' END)  
    FROM [Current] c JOIN
         viLastRecord vlr
         ON c.VHOST = vlr.VHOST AND  
            c.HOSTNAME = vlr.HOSTNAME;