Microsoft SQL Server에서 작업하고 있는데 테이블에 새 데이터를 삽입하려고하지만 내 데이터가 과거에 실수로 한 번 삽입 된 경우 데이터베이스에 문제가 있습니다. 그러한 재 삽입은 중요한 위반을 일으킬 수 있습니다. 내가 필요한 데이터를 삽입하고 실수로 이미 포함 된 것을 업데이트하는 방법을 찾고 있습니다.SQL 삽입 및 업데이트
BEGIN TRANSACTION
INSERT INTO dbs_salesinternals.acc_saleshistory
SELECT a,
b AS n
FROM dbs_sales.orders AS O
INNER JOIN dbs_salesinternals.acc_report_months AS ARM
ON ARM.acc_report_month_id = dbo.Reportmonth(CASE
WHEN O.ordertypeid = 2 THEN shipduedate
ELSE shipdate
END)
INNER JOIN dbo.contactfullnames
ON O.customerid = dbo.contactfullnames.contact_id
INNER JOIN dbs_sales.ordertypes
ON dbs_sales.ordertypes.ordertypeid = O.ordertypeid
LEFT JOIN(SELECT OD.orderid,
Sum(CASE
WHEN PB.format LIKE '%kit%'
AND units.curriculumcode = 'CUR' THEN
OD.price
ELSE 0
END) AS KitPart,
Sum(CASE
WHEN PB.format = 'PD'
AND units.curriculumcode = 'CUR' THEN
OD.price
ELSE 0
END) AS PDPart,
Sum(CASE
WHEN (PB.format <> 'PD'
AND PB.format NOT LIKE '%kit%'
AND units.curriculumcode = 'CUR') THEN
OD.price
ELSE 0
END) AS OtherPart,
Sum(CASE
WHEN PB.format LIKE '%kit%'
AND units.curriculumcode = 'WEB' THEN
OD.price
ELSE 0
END) AS EKitPart,
Sum(CASE
WHEN PB.format = 'PD'
AND units.curriculumcode = 'WEB' THEN
OD.price
ELSE 0
END) AS EPDPart,
Sum(CASE
WHEN (PB.format <> 'PD'
AND PB.format NOT LIKE '%kit%'
AND units.curriculumcode = 'WEB') THEN
OD.price
ELSE 0
END) AS EGuidePart
FROM dbs_salesinternals.eieproductsbase AS PB
INNER JOIN dbs_salesinternals.productpricing AS PP
ON PB.productid = PP.product_id
INNER JOIN dbs_sales.[order details] AS OD
ON PP.productpricing_id = OD.productpricing_id
INNER JOIN units
ON PB.unit_id = units.unit_id
GROUP BY OD.orderid) OP
ON OP.orderid = O.orderid
LEFT JOIN [dbo].[grant_codes]
ON [dbo].[grant_codes].grantcodemap_id = O.accountcode
WHERE O.ordertotal <> 0
AND O.ordertypeid IN (1, 2, 3, 4)
AND ARM.acc_report_month_id = 166
AND ([dbo].[grant_codes].granttype IS NULL
OR [dbo].[grant_codes].granttype <> 2)
COMMIT TRANSACTION
어떻게 내가 필요한 것을 달성하기 위해이를 변경할 수 있습니다 : 그것은 지금의 약자로 코드의 내역 중 일부는 간결 변경하지만 내 코드 되었는가?
MERGE를 조사해야하는 것처럼 들립니다. http://msdn.microsoft.com/en-us/library/bb510625.aspx –
질문을 편집하고 모든 것을 굵게 표시하여 서식에서 제거 할 수 있습니다 도움이 안돼. –
옙 병합은 매우 유용한 도구가 될 수 있습니다. –