假設[訂單明細]是[訂單明細11]的副本。你只需要插入或更新您的記錄:你可以使用一個MERGE(what is a MERGE? here),例如:
MERGE [dbo].[Order Details]
USING (select OrderID,ProductID,UnitPrice,Quantity,Discount
from[dbo].[Order Detai11]
where OrderID between 1 and 150000
) As tblMergeDetail(OrderID,ProductID,UnitPrice,Quantity,Discount)
ON ( tblMergeDetail.OrderId = [dbo].[Order Details].OrderId )
WHEN MATCHED THEN
SET ProductID = tblMergeDetail.ProductID,
UnitPrice = tblMergeDetail.UnitPrice,
Quantity = tblMergeDetail.Quantity,
Discount = tblMergeDetail.Discount
WHEN NOT MATCHED THEN
INSERT (OrderID,ProductID,UnitPrice,Quantity,Discount)
VALUES (
tblMergeDetail.OrderID,
tblMergeDetail.ProductID,
tblMergeDetail.UnitPrice,
tblMergeDetail.Quantity,
tblMergeDetail.Discount
);
如果你只想複製沒有存在的記錄,你可以只排除[訂單詳細信息]裏面的值,例如:
insert into [dbo].[Order Details]
(OrderID,ProductID,UnitPrice,Quantity,Discount)
select OrderID,ProductID,UnitPrice,Quantity,Discount
from[dbo].[Order Detai11] as OD1
where OD1.OrderID between 1 and 150000
and NOT EXISTS ( select exclusionTbl.OrderID
from [dbo].[Order Details] exclusionTbl
where exclusionTbl.OrderID = OD1.OrderID
)
編輯:
的其他例子:
insert into [dbo].[Order Details]
(OrderID,ProductID,UnitPrice,Quantity,Discount)
select OrderID,ProductID,UnitPrice,Quantity,Discount
from[dbo].[Order Detai11] as OD1
where OD1.OrderID between 1 and 150000
and OD1.OrderID NOT IN( select exclusionTbl.OrderID
from [dbo].[Order Details] exclusionTbl
where exclusionTbl.OrderID between 1 and 150000
)
對於NOT EXISTS查詢:我們檢查它是否存在我們想要從[OrderDetai11]中插入[OrderDetai11]內的OrderID
對於NOT IN查詢:我們檢查所有[OrderDetai11] .OrderIDs沒有人包含在[Order Details] .OrderID列表中。它實現與NOT EXISTS查詢相同的結果。
釘牢它..在這裏罰款..你可以解釋我不存在第二個查詢部分 – Bodhi
[首先你需要知道主鍵是什麼。](https://msdn.microsoft.com/en-us/library/ms179610.aspx) 如果你確實明白這一點,你現在知道你爲什麼會出錯:「違反主鍵約束」。我在第二個查詢中的條件是永遠不會觸發密鑰的重複(OrderID)。 – Lostblue
Arg我剛剛意識到我假定OrderID是您的主鍵。那是對的嗎?否則,我的兩個答案都是完全錯誤的。 – Lostblue