ストアドプロシージャでbegin transactionを使用します。私は、データを更新するコードがあります。BEGIN TRANSACTIONは行/列ロックを行いますか?
UPDATE
employee
SET
name = @name,
surname = @surname
WHERE
empId = @empid;
んSQL Serverの更新されている行またはcoloumn上の任意のロックを行いますか?これが当てはまらない場合は、進行中の現在の更新がある間に他のユーザーが別の更新を実行しないようにするにはどうすればよいですか?ストアドプロシージャにする必要はありません.C#もオプションです。
いいえ - 何もしないだけではBEGIN TRANSACTIONを。 UPDATEステートメントは、更新される行(または複数の行)の**更新ロック**(U)を取得しようとし、トランザクションが完了するまでそれらのロックを保持します( 'COMMIT'または' ROLLBACK') 。 –
@marc_s:これは100%正確ではありません。 **(1)**通常、 'U'ロックは行が読み込まれるときに取られます。次に、 'SQL Server'が更新を決定すると、' U'ロックを 'X'ロックの行に変換して' X'ロックを行います。 **(2)**しかし、場合によっては、 'SQL Server'は' X'ロックを直接取ることにします( 'U'ロックと' U-> X'変換)。 –
@BogdanSahlean:OK - 多分 - しかし、BEGIN TRANSACTION自体は何もしていません - それはOPが求めていたものです。右?? –