sql - 更新和插入 SQL

标签 sql sql-server sql-server-2008 tsql

我如何修改下面的 TSQL 更新语句以插入源表的 partid 不在目标表中项目 ID ='500224' 的 partid 字段中。如果不存在,我需要插入。

USE [DBNAME];
GO
    UPDATE m
    SET [partId] = a.[partId] 
select * FROM
    [SourceTable] m
    INNER JOIN 
    [DestTable] a
    ON m.[bomItem] = a.[ItemId]
    AND m.bomEntry = a.bomEntry AND  m.bomRev = a.rev  WHERE
    m.bomRev=a.rev AND m.partId <> a.partid AND m.lineNbr = a.bomEntry ;
  Go

在源表中

enter image description here

在目标表中

enter image description here

例如,在上面的图片中,partid 100280 不存在于目标表中,我想添加它并保持所有其他相同。

最佳答案

您可以使用带有 NULL 检查的 LEFT JOIN 将缺失的 partid 插入到目标表中。

INSERT INTO [DestTable] (bomItem, bomRev, bomEnty, lineNbr, dType, partId, revId, qty)
SELECT ST.ItemID, ST.rev, ST.bomEnty, ST.lineNbr, 0 AS dType, ST.partid, NULL AS revId, ST.qty
FROM [SourceTable] ST
LEFT JOIN [DestTable] DT ON DT.bomItem = ST.ItemID AND DT.partid = ST.partid
        AND DT.bomRev = ST.Rev AND DT.bomEntry = ST.bomEntry -- remove these conditions if not need
WHERE DT.partid IS NULL

由于两个表之间很少有列不匹配,我在 SELECT

中添加了正确的列名

关于sql - 更新和插入 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38405327/

相关文章:

sql - 如何在 COUNT 聚合中包含 "zero"/"0"结果?

sql - 如何对位列使用 SUM?

java - 板对板拼字游戏

c++ - 在 Visual Studio C++ 中执行简单 SQL 查询时出错

.net - linq 与 sql(或 .NET 应用程序与 SQL Server Management Studio)

sql-server - SQL 错误 : Incorrect syntax near the keyword 'End'

sql-server-2008 - 如何在varbinary(max)字段中插入0

php - 如何在sql查询中使用变量名访问表

sql-server - 通过SQL Server 2008查询时"č"转换为"c"

sql - 使用sql server解析xml