私は更新ストアドプロシージャを持っており、私はそれをC#コードから呼び出すと、私のコードは3つのスレッドで同時に実行されています。 Updateステートメントは、一般に、「トランザクション(プロセスID)が別のプロセスとロックリソースでデッドロックされ、デッドロックの被害者として選択されました。」というエラーをスローします。どのようにSQL Server 2014またはC#コードでこれを解決できますか?トランザクション(プロセスID)は、別のプロセスとのロックリソースでデッドロックされ、デッドロックの犠牲者として選択されました。 in SQL Server 2014
更新ストアドプロシージャ:
ALTER PROCEDURE sp_UpdateSP
@RecordID nvarchar(50),
@FileNetID nvarchar(50),
@ClassName nvarchar(150)
AS
Begin tran t1
UPDATE MYTABLE SET [email protected], [email protected], CONTROLID='FileAttach' where [email protected]
Commit tran t1
表ランキング:問題は、SQLのパフォーマンスによって引き起こされる 非ユニークな、非クラスタOTRECORDID昇順NVARCHAR(255)
おかげ
この手順ではデッドロックは発生しません。他のどのプロシージャやスレッドでこのテーブルを使用していますか? –
プロシージャ名を 'sp_'で開始しないでください。 [sp_接頭辞はまだno-noですか? - Aaron Bertrand](https://sqlperformance.com/2012/10/t-sql-queries/sp_prefix) – SqlZim
'otrecordid'は' nvarchar(255) 'です。 '@ RecordId'' nvarchar(50)'のパラメータはなぜですか? – SqlZim