我在Microsoft SQL Server的工作,我有我的数据库中的一个问题,即我试图插入新的数据到一个表,但数据在过去被意外插入一次,因为这样的重新插入会导致重大违规行为。我正在寻找一种方法来插入我需要的数据并更新已经意外包含的内容。一些代码的详情已更改为简洁,但我的代码,因为它现在代表的是:SQL INSERT和UPDATE
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 –
你可能想编辑你的问题,并删除问题的格式,使一切粗体将无济于事。 –
是的,合并可以是一个非常有用的工具 –