[注文詳細]は[注文詳細11]のコピーであるとします。あなたは自分のレコードを挿入または更新する:
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
);
あなたはあなただけの[注文の詳細]内の値を除外することができる唯一のどれも既存のレコードをコピーする場合、例:あなたはMERGE(what is a MERGE? here)、例を使用することができます:
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
)
EDIT:
他の例:
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]から挿入したい[Order Details]内にOrderIDが存在しないことを確認します。
NOT INクエリの場合:すべての[OrderDetai11] .OrderIDs [Order Details] .OrderIDのリストには誰も含まれていません。 NOT EXISTSクエリと同じ結果が得られます。
これはうまくいけません..第2のクエリにNOT exists部分を教えてください。 – Bodhi
[最初にPRIMARY KEYが何であるかを知る必要があります。](https://msdn.microsoft.com/en-us/library/ms179610.aspx) これを理解していれば、あなたはあなたのエラー: "PRIMARY KEY制約の違反"。 2番目のクエリの条件は、キー(OrderID)の重複を決して引き起こさないことです。 – Lostblue
Arg私はOrderIDが主キーであることを前提にしていることに気づきました。あれは正しいですか?それ以外の場合、私は両方の答えに全く間違っています。 – Lostblue