以下の記述:
INSERT INTO dbo.Changes([Content], [Date], [UserId], [CompanyId])
VALUES (@1, @2, @3, @4);
SELECT @@identity;
このSQLエラー3960が表示されます:
更新の競合により、スナップショット分離トランザクションが中止されました。スナップショット分離を使用してデータベース 'myDatabase' のテーブル 'dbo.Companies' に直接または間接的にアクセスし、別のトランザクションによって変更または削除された行を更新、削除、または挿入することはできません。トランザクションを再試行するか、更新/削除ステートメントの分離レベルを変更してください。
私が理解している限り、エラーメッセージから、dbo.Companies
別の接続が変更されている間は、テーブルを更新、削除、または挿入しないでくださいdbo.Companies
。
しかし、別のテーブルdbo.Changes
( への外部キーを持つdbo.Companies
) に新しい行を挿入していて、 で参照されている行を削除していなかったのに、主キーではなく でdbo.Companies
行を更新しただけだったのはなぜですか? dbo.Companies
これはうまくいくはずですよね?(SQL Server のバグですか?)
アップデート:
テーブルは次のようになります。
dbo.Changes([Id] int PK, [Content] nvarchar,
[Date] datetime, [UserId] int, [CompanyId] int -> dbo.Companies.[Id])
dbo.Companies([Id] int PK, [Name] nvarchar)
2番目の更新は行っています:
UPDATE dbo.Companies WHERE [Id] = @1 SET [Name] = @2;