我对我的<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id='app'></div>
表执行了以下查询,该表旨在复制Order Details
OrderDetai11
我收到以下错误
Msg 2627,Level 14,State 1,Line 1违反PRIMARY KEY 约束'PK_Order_Details'。无法在对象中插入重复键 'dbo.Order Details'。重复键值为(10248,11)。该 声明已被终止。
答案 0 :(得分:3)
假设[订单明细]是[订单明细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]
插入的[Order Details]中的OrderID对于NOT IN查询:我们检查所有[OrderDetai11] .OrderIDs nobody包含在[Order Details] .OrderID列表中。它实现了与NOT EXISTS查询相同的结果。
答案 1 :(得分:1)
您尝试将具有相同主键的记录插入新表中。
您需要确保原始表没有重复记录,可能是您的主键是OrderID
。
您可以在原始表格上使用此选择查询来检查:
SELECT OrderID, COUNT(OrderID) AS Total
FROM [dbo].[Order Detai11]
GROUP BY OrderID
ORDER BY Total DESC
如果total
列中有任何包含2个或更多行的行,则表示您有重复项。
您需要删除重复项,或者如果要保留它们,则需要在新表中创建一个新列,并将其作为主键。
评论后:
您的原始表可能没有主键,或者如果没有,您还没有将其正确复制到新表中。
除非您执行以下任一操作,否则无法使用此功能:
OrderID
作为主键。答案 2 :(得分:0)
只需确保目标表没有重复项即可。并且如果源表中有重复项,请确保仅获取不同的记录。
<script>
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m, key, value) {
vars[key] = value;
});
return vars;
}
var path = window.location.pathname;
var pathName = path.substring(0, path.lastIndexOf('/') + 1);
console.log(path);
console.log(pathName);
pathName = pathName.replace(/\//g, "")
pathName = pathName.replace(/pricelist/g, "")
pathName = pathName.replace(/\b\w/g, l => l.toUpperCase())
var number = getUrlVars()["max_price"];
var brand = getUrlVars()["brand"];
brand = brand.replace(/\b\w/g, l => l.toUpperCase())
if (window.location.href.indexOf("min_price") != null) {document.title = pathName + ' Under Rs. ' + number;}
if (window.location.href.indexOf("pa_brand") > -1) {document.title = brand + ' ' + pathName + ' Price List India';}
if (window.location.href.indexOf("min_price") > -1 && window.location.href.indexOf("brand") > -1) {document.title = brand + ' ' + pathName + ' Under Rs.' + number;}
</script>