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_noinvoice_detail table 中是一个 varcharitem_idtemp_item_sales_details table 中是一个numeric,但我只选择带有 ISNUMERIC(detail.item_no) = 1

的数值

您有 invoice_detail item_no 个值具有前导零。在 varchar 语法中,0123123 是不同且唯一的,但是如果将它们转换为数字,则会发生冲突。如果可以避免,我强烈建议避免以这种方式转换主键值。如果没有,您将需要有一种方法来处理这个问题。