2016-12-29 3 views
0

@@identitySCOPE_IDENTITY()に置き換えると、デッドロックが発生しますが、scope_identity()を使用することをお勧めします。C#では、select SCOPE_IDENTITY()を使用するとデッドロックが発生しますか?

私のC#の方法では、私はマスターのための多くの挿入クエリがあり、その詳細です。誰でもscope_identity()を呼び出すと、タイムアウトやデッドロックの問題が発生するのでしょうか?

+0

なぜ「SCOPE_IDENTITY()」ですか? 'INSERT'に原因がありますか? – anatol

+1

デッドロックグラフを共有してください – TheGameiswar

+0

SQL Server 2008を使用している場合、いくつかの制約の下で、デッドロックグラフを取得するために、以下の回答を確認できます。http://dba.stackexchange.com/a/10646/31995 – TheGameiswar

答えて

1

私はこの状況が、テーブルへの並列挿入を実行するあなたのコードに関するものだと思います。 Pinal Daveに、並列挿入に関するSCOPE_IDENTITYのバグに関する記事があります。 ここにお読みください。 http://blog.sqlauthority.com/2009/03/24/sql-server-2008-scope_identity-bug-with-multi-processor-parallel-plan-and-solution/

+0

私はこの記事を読んでいますが、SQL Server 2012を使用しています。 –

+0

記事のアドバイスに従うとどうなりますか?たとえば、sp_configure 'max degree of parallelism'、1; – Cato

+0

私はそれが何であるかを理解するまでまだですか? –

0

後、私は私のシナリオでは、デッドロックのために適用される解決策は以下のとおりです。

  1. デッドロックは、挿入および更新クエリに行ロックを設定することによって解決されます。
  2. また、デッドロックを作成する別の要因である であるコードでコミットされていないトランザクションがいくつか見つかりました。
  3. sp_configure 'max degree of parallelism'を1に設定すると、 はscope_identityを@@ identityに置き換えます。
関連する問題