我有几个代码片段,即使我希望它不会抛出它,也会引发上述异常。
摘录1:
;WITH CompanyCTE AS
( SELECT DISTINCT Company
FROM @Companies c)
MERGE INTO dbo.Company WITH (UPDLOCK) d
USING CompanyCTE s ON d.Company=s.CompanyName
WHEN NOT MATCHED BY TARGET THEN
INSERT(Company, UpdateDate)
VALUES(s.CompanyName, GETDATE())
;
摘录2:
UPDATE tblSESSION
SET SESSION_TOKEN = @SESSION_TOKEN
WHERE USER_TOKEN = @USER_TOKEN
IF(@@ROWCOUNT = 0)
BEGIN
INSERT INTO tblSESSION(USER_TOKEN, SESSION_TOKEN)
SELECT @USER_TOKEN AS USER_TOKEN, @SESSION_TOKEN AS SESSION_TOKEN
WHERE NOT EXISTS(SELECT 1 FROM tblSESSION WHERE USER_TOKEN =
@USER_TOKEN)
END
我删除了不相关的代码,但是:
错误信息是这样的:
无法在对象dbo.Company中插入具有唯一索引“IX_Company_Name”的重复键行。重复键值为(XYZ公司)。
我假设即使我的sproc同时被调用具有相同的值,检查应该能够防止重复的密钥插入尝试。我无法在开发环境中重现它,但我在生产日志中收到错误消息。 关于支票无法处理的可能案例的任何见解?