如下聲明:快照隔離事務中止由於更新衝突
INSERT INTO dbo.Changes([Content], [Date], [UserId], [CompanyId])
VALUES (@1, @2, @3, @4);
SELECT @@identity;
給我這個SQL錯誤3960:
中止由於更新衝突快照隔離事務。您 無法使用快照隔離直接訪問表'dbo.Companies' 或間接在數據庫'myDatabase'中更新,刪除或插入 已由其他事務修改或刪除的行。 重試事務或更改 更新/刪除語句的隔離級別。
據我理解,從該錯誤消息,我不應該更新,刪除,或在另一連接正在修改dbo.Companies
的時間插入到表dbo.Companies
。
但爲什麼當我插入新行到另一個表dbo.Changes
(有外鍵dbo.Companies
),我並沒有在dbo.Companies
刪除引用的行,但我只是更新在dbo.Companies
行,而不是主要發生鍵?這應該可以,不是嗎? (它是在SQL Server中的錯誤?)
UPDATE:
表看起來如下:
dbo.Changes([Id] int PK, [Content] nvarchar,
[Date] datetime, [UserId] int, [CompanyId] int -> dbo.Companies.[Id])
dbo.Companies([Id] int PK, [Name] nvarchar)
二更新是這樣做的:
UPDATE dbo.Companies WHERE [Id] = @1 SET [Name] = @2;
謝謝你的提示,但它似乎沒有幫助。 –
這兩個語句(INSERT和UPDATE)是指同一個客戶?如果是這樣,就我所知,我們運氣不好。 –
是的,插入正在使用當前正在更新的公司的ID。 –