SQL Server Management Studio(SSMS)でコミットを手動で行う方法
SSMSでアプリケーション単位(恒久的)でオートコミットをオフにする方法と、セッション単位(一時的)にオートコミットオフにする方法を解説しています。
使いどころ
システム開発においてトランザクションの排他制御テストをする時など、「SQL Server Management Studio」で手動コミットしたい時があります。これは、SSMSでテーブルや更新レコードをロックしておいて、プログラム側でトランザクションを実行した時に、きちんと待ち状態(排他制御)になっているか、もしくは、SELECT文などでコミット前のレコードが参照されていないかなど確認する時に役に立ちます。
自動コミットをオフにする方法(恒久的)
1,メニュー→ツール→オプションをクリックします。
![SSMS実行例(高給)](https://kcfran.com/wp-content/uploads/2024/02/image-96-1024x647.png)
SSMSではオートコミットがデフォルトONになっています。クエリ画面で実行する「INSERT、UPDATE、DELETE」は即実行しトランザクションが終了します。開発段階ではオートコミットがONのほうが重宝しますが、システムの運用フェーズでは明確にコミットを指示したほうがミスを防止することができます。
2,クエリ実行(❶)→SQL Server(❷)→ANSI(➌)→SET IMPLICIT_TRANSACTIONS(M)にチェックをつける
![SSMSオプション](https://kcfran.com/wp-content/uploads/2024/02/image-97-1024x590.png)
3,SSMSアプリケーションを再起動する。これで、commitを明示的に実行しない限りデータが更新されないようになります。
4,現在のテーブル内のレコード状態
![SSMS実行例](https://kcfran.com/wp-content/uploads/2024/02/image-98-1024x552.png)
5,新規にデータ登録するための、INSERT文を発行します。
![SSMS実行例 INSERT](https://kcfran.com/wp-content/uploads/2024/02/image-99-1024x527.png)
6,新しいクエリをクリックします。select文を発行してテーブル全レコードを表示します。commitしていないため、追加したレコードは表示されていません。
![SSMS実行例](https://kcfran.com/wp-content/uploads/2024/02/image-101-1024x527.png)
7,commitを選択し実行ボタンをクリックして、commitを実行します。
![SSMS実行例](https://kcfran.com/wp-content/uploads/2024/02/image-102-1024x527.png)
8,commitが正常に実行されました。
![SSMS実行例](https://kcfran.com/wp-content/uploads/2024/02/image-103-1024x527.png)
9,改めてselect文でテーブル内容を見てみると、INSERTしたレコードが表示されいるのがわかると思います。
![SSMS実行例](https://kcfran.com/wp-content/uploads/2024/02/image-104-1024x527.png)
自動コミットをオフにする方法(一時的)
新しいクエリ(セッション)単位で、コミットを手動で行うことができます。SSMSアプリケーションの再起動が不要で便利です。
まずは、新しいクエリボタンをクリックして、クエリを開きます。
![SSMS実行例(一時的)](https://kcfran.com/wp-content/uploads/2024/02/image-105-1024x664.png)
メニューバー→クエリ(❶)→クエリオプション(❷)をクリックします。
![SSMS実行例(一時的)](https://kcfran.com/wp-content/uploads/2024/02/image-106-1024x598.png)
実行(❶)→ANSI(❷)→SET IMPLICIT_TRANSACTIONS(M)(➌)にチェックします。これで、このウィンドウで開いてるクエリは、オートコミットがオフになります。新しいクエリで新たに開いたウィンドウには適用されません。
![クエリオプション](https://kcfran.com/wp-content/uploads/2024/02/image-107.png)