SQL Server 2005 中按列分组的 INSERT INTO 会导致意外的重复键冲突
An INSERT INTO in MSSQL Server 2005 that groups by a column leads to unexpected duplicate key violation
我正在 Microsoft SQL Server 2005 上执行存储过程。有问题的代码已经完美运行了大约 12 个月,但现在在 "duplicate key violation error"
上失败了
如何通过以下方式获得重复密钥违规错误?
这是错误:
Violation of Primary Key constraint 'Pk_temp_item_sales_details'
Cannot insert duplicate key in object 'dbo.temp_item_sales_details'.
[SQLSTATE 23000][Error2627]
这是执行的SQL:
TRUNCATE TABLE temp_item_sales_details;
INSERT INTO temp_item_sales_details
(item_id,
last_order_date)
SELECT detail.item_no,
Max(header.sales_invoice_date)
FROM invoice_header header WITH(NOLOCK)
JOIN invoice_detail detail WITH(NOLOCK)
ON header.invoice_number = detail.invoice_no
WHERE Isnumeric(detail.item_no) = 1
GROUP BY detail.item_no
item_no
在 invoice_detail
table 中是一个 varchar
而 item_id
在 temp_item_sales_details
table 中是一个numeric
,但我只选择带有 ISNUMERIC(detail.item_no) = 1
的数值
您有 invoice_detail item_no 个值具有前导零。在 varchar 语法中,0123
和 123
是不同且唯一的,但是如果将它们转换为数字,则会发生冲突。如果可以避免,我强烈建议避免以这种方式转换主键值。如果没有,您将需要有一种方法来处理这个问题。
我正在 Microsoft SQL Server 2005 上执行存储过程。有问题的代码已经完美运行了大约 12 个月,但现在在 "duplicate key violation error"
上失败了如何通过以下方式获得重复密钥违规错误?
这是错误:
Violation of Primary Key constraint 'Pk_temp_item_sales_details' Cannot insert duplicate key in object 'dbo.temp_item_sales_details'. [SQLSTATE 23000][Error2627]
这是执行的SQL:
TRUNCATE TABLE temp_item_sales_details;
INSERT INTO temp_item_sales_details
(item_id,
last_order_date)
SELECT detail.item_no,
Max(header.sales_invoice_date)
FROM invoice_header header WITH(NOLOCK)
JOIN invoice_detail detail WITH(NOLOCK)
ON header.invoice_number = detail.invoice_no
WHERE Isnumeric(detail.item_no) = 1
GROUP BY detail.item_no
item_no
在 invoice_detail
table 中是一个 varchar
而 item_id
在 temp_item_sales_details
table 中是一个numeric
,但我只选择带有 ISNUMERIC(detail.item_no) = 1
您有 invoice_detail item_no 个值具有前导零。在 varchar 语法中,0123
和 123
是不同且唯一的,但是如果将它们转换为数字,则会发生冲突。如果可以避免,我强烈建议避免以这种方式转换主键值。如果没有,您将需要有一种方法来处理这个问题。