複数の SQL コマンドを実行し、挿入が成功したかどうかを判断するブール値を返す C# でメソッドを作成しています。私の問題は、このコマンドを「オールオアナッシング」コマンドとして実行したいということです。これは、3 つの異なるコマンドを実行する必要があり、3 番目のコマンドが正しく実行されない場合、最初の 2 つのコマンドの変更がコミットされないことを意味します。SQLServerでこれを行うにはどうすればよいですか?
1132 次
2 に答える
1
C# から 3 つのコマンドを実行する場合:
SqlTransaction tran = connection.BeginTransaction();
try
{
...exec first command and get result...
...exec second commmand and get result...
...exec third command and get result...
if (!firstResult || !secondResult || !thirdResult)
throw new Exception();
tran.Commit();
}
catch
{
tran.Rollback();
}
ストアド プロシージャを呼び出して SQL サーバーで 3 つのコマンドを実行する場合は、次を使用します。
BEGIN TRANSACTION
cmd1
cmd2
cmd3
IF @Success = 1 THEN
COMMIT TRANSATION
ELSE
ROLLBACK TRANSACTION
SQL で try..catch ブロックを使用して例外をキャッチし、エラーが発生した場合にトランザクションをロールバックすることもできます。
于 2013-04-16T20:19:06.220 に答える
0
多くの SQL クエリ (多くの場合、INSERTS、UPDATES、または DELETES) を 1 つの作業単位にグループ化するトランザクションを検索している場合、クエリを BEGIN TRAN (最初) と COMMIT TRAN (最後) で囲む必要があります。 SQL サーバー トランザクション
于 2013-04-16T20:19:53.357 に答える