T-SQL を使用してアトミックな行の存在チェックと挿入を実行する方法
データベース システムでは、多くの場合、行に対して操作を実行する必要があります。それは存在するかもしれないし、存在しないかもしれない。このようなシナリオでは、データの整合性を維持するためにアトミック性と信頼性を確保することが重要です。
行が存在するかどうかを確認し、それに応じて挿入操作を実行するには、T-SQL で次のアプローチを検討してください。
IF EXISTS (SELECT * FROM Bookings WHERE FlightID = @Id) BEGIN -- Update the existing row here... END ELSE BEGIN -- Insert a new row here... END
このアプローチでは、IF EXISTS ステートメントを使用して存在チェックと挿入操作の両方を 1 つのトランザクション内で実行することでアトミック性を確保します。これにより、同時トランザクションによって重複行が挿入される可能性がある競合状態が防止されます。
トランザクション制御
トランザクション内で操作をラップするには、BEGIN TRANSACTION、COMMIT TRANSACTION などのステートメントを使用します。 、ROLLBACK TRANSACTION。
行数処理
@@ROWCOUNT グローバル変数は、操作の影響を受ける行数を追跡します。この場合、行が存在する場合でも (変更が適用されていない場合など)、更新操作で 0 行が返される可能性があるため、存在チェックの信頼性は高くありません。したがって、サブクエリで IF EXISTS を使用する方が信頼性が高くなります。
トランザクション ステータスを返す
トランザクションの成功を示すには、TRY-CATCH を使用できます。ブロックして適切な値を返します:
BEGIN TRY -- Transaction Logic COMMIT TRANSACTION RETURN 1 -- Transaction committed END TRY BEGIN CATCH ROLLBACK TRANSACTION RETURN 0 -- Transaction failed END CATCH
以上が行の存在をアトミックにチェックして T-SQL に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。