3

ストアド プロシージャで begin transaction を使用しています。データを更新するコードがあります:

UPDATE
     employee
SET
     name = @name,
     surname = @surname
WHERE
     empId = @empid;

SQL Server は、更新中の行または列をロックしますか? そうでない場合、現在進行中の更新中に他のユーザーが別の更新を実行できないようにするにはどうすればよいですか? ストアド プロシージャにある必要はありません。C# もオプションです。

4

3 に答える 3

3

SQL Server は、アクセスされているオブジェクトに対してロックを発行します。ロックは、内部で何が起こっているかという点でかなり複雑です。

特定の更新ステートメントについて、単一の行が更新されていると仮定します。

  • Row : Update Lock は、データが変更されたときに排他ロックに変換される Update the data へのアクセスを取得します。

  • Page : Intent Update。データが変更されると、Intent Exclusive に変換されます。

  • 表: 意図の更新。

MS サイトには、ロック モードに関する多くの詳細があります: http://msdn.microsoft.com/en-us/library/ms175519(v=sql.100).aspx

于 2012-04-12T08:54:29.677 に答える
1

デフォルトでは、MSSQLはUPDATEステートメントの行レベルのロックを作成します。UPDATEステートメントの影響を受けるすべての行がロックされるため、更新の実行中に他のユーザーがこれらの行を変更することはできません。

ロックのヒントを使用して、デフォルトのロック動作を変更できます:http: //msdn.microsoft.com/en-us/library/aa213026%28v=sql.80%29.aspx

于 2012-04-12T08:58:36.913 に答える
0

これが sproc 内の唯一のステートメントである場合、それはトランザクションです。各ステートメントはアトミックであり、機能するかしないかのどちらかであることを覚えておいてください。ロックについて心配する必要はありません。

于 2012-04-12T08:53:42.037 に答える