sql更新表使用案例

标签 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
The multi-part identifier "viLastRecord.VHOST" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "viLastRecord.HOSTNAME" could not be bound.

最佳答案

您需要一个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;

关于sql更新表使用案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26879200/

相关文章:

php - 我可以对这段代码进行 SQL 注入(inject)吗?

sql - 在取消挂起时退出 TOAD?

sql - 使用 Oracle SQL 生成嵌套 XML

sql - MySQL - 基于日期加入

mysql - 您的 SQL 语法有错误 [MariaDB]

php - Mysql:将数据数组存储在单个列中

sql - 将选择转换为更新

sql - SQL 查询帮助 - 使用 INTERBASE 的子查询

php - 运行 Composer 更新后的 SQL 错误

sql - 每个城市选择 PostgreSQL 中计数最多的 2 个产品