如何修改下面的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
在源表中
目的地表
对于上面图片中的示例,partid 100280
并不存在于目标表中,我想添加它并保持所有其他内容相同。
答案 0 :(得分:0)
https://msdn.microsoft.com/en-us/library/ms177682.aspx
您需要使用IN运算符:
SELECT partId FROM Source WHERE partID NOT IN (SELECT partID FROM Destination)
这将为您提供未在Destination表中显示的所有partID的列表,您可以根据需要将此查询集成到UPDATE或INSERT查询中。
答案 1 :(得分:0)
IF EXISTS(SELECT * FROM destinationTable WHERE partID ='SomeValue')
更新目的地表
SET(..)
在哪里Column1 ='SomeValue'
ELSE
INSERT INTO destinationTable
价值观(......)
答案 2 :(得分:0)
您可以使用LEFT JOIN
进行NULL
检查,将丢失的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
答案 3 :(得分:-1)
Insert into destTab(bomItem, bomRev, bomEntry, partId, qty)
Select Itemid, rev, bomEntry,partid, qty
from sourceTab as s
where not exists (select 1 from destTab as d where d.bomItem=s.Itemid and d.partId=s.partId)