rdb

SQL ServerのGOとは? 必要性と使い方について紹介

  • POST
SQL ServerのGOとは? 必要性と使い方について紹介 はじめに MicorsoftのSQL Serverを運用していると、GO という記述を見かけることがあるかと思います。 GOのMicrosoftの公式サイトの解説だと意味が分かりづら行く、どういったケースで使うものなのか、理解が難しいという方もいらっしゃるのではないかと思います。 この記事では、GO の使い方について紹介します。 GOはSQL文ではなく、SQL Server用のコマンド GO は、SQL 文ではなく、バッチ(一連の処理をまとめたもの)の終了を SQL Server ユーティリティに通知するためのSQL Server専用のコマンドです。 -- バッチ1開始 SELECT @@VERSION; GO -- バッチ1終了 -- バッチ2開始 SELECT USER_NAME(); SELECT DB_NAME(); GO -- バッチ2終了 Microsoft公式:GOコマンド SQL Server ユーティリティとは SQL Server ユーティリティは、sqlcmd ユーティリティ、osql ユーティリティ、および SQL Server Management Studio などのMicrosoftから提供されている便利ツールの総称です。 SQL Serverユーティリティ GOコマンドの構文 GOはGO [count]のような形式で指定します。 countには正の整数を指定します。 GOの前のバッチが、指定された回数実行されます。 countは省略可能で、省略した場合は1回だけ実行されます。 -- 直前のSQLを3回実行 SELECT @@VERSION; GO 3 -- 省略した場合は1回実行 SELECT USER_NAME(); SELECT DB_NAME(); GO GOは、SQL句と異なり、終了端子としてセミコロンを使用することはできません。

ストアドプロシージャによって変更されたレコード数をカウントする

  • POST
はじめに SQL Serverにおいて、ストアドプロシージャで大量にデータを処理した後に、何件のレコードが登録、削除、更新されたのかを把握したいケースがあると思います。 この記事では、ストアドプロシージャの実行によって変更されたレコード数をカウントにJavaアプリケーションでログ出力する方法を紹介します。 変更レコード数を表示するには @@ROWCOUNT を利用する SQL Serverには、 @@ROWCOUNT という直前に実行したSQLで影響を与えたレコード数を返す特殊変数があります。 ※ 行数が20億を超える場合は、ROWCOUNT_BIG を使用します。 https://docs.microsoft.com/en-us/sql/t-sql/functions/rowcount-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15 以下に、@@ROWCOUNTを使って削除レコード数および、登録レコード数を表示するストアドプロシージャの例を記載しました。 ALTER PROCEDURE [TEST].[procedure_count_record] ( @DELETE_ROW_COUNT INTEGER OUTPUT ,@INSERT_ROW_COUNT INTEGER OUTPUT ) AS SET @RESULT_FLAG = 'FALSE' SET @RESULT_MESSAGE = '' DELETE FROM TEST.TABLE_001; SET @DELETE_ROW_COUNT = @@ROWCOUNT; PRINT @DELETE_ROW_COUNT INSERT INTO TEST.TABLE_001 VALUES( 1, 'test') SET @INSERT_ROW_COUNT = @@ROWCOUNT; PRINT @INSERT_ROW_COUNT Javaアプリケーションからレコード数を表示 @@ROWCOUNT を使って、登録レコード数が取得できることが分かりました。

SQL Serverに登録日時と更新日時を自動で設定する方法

  • POST
はじめに 本記事は、SQL Serverにおいて、INSERT時に登録日時を、UPDATE時に更新日時を自動で登録する方法を紹介します。 INSERT時に登録日時を自動登録 対象のテーブルに対して、以下のSQLを実行することで、レコードの登録日時の自動登録が可能になります。 ALTER TABLE [テーブル名] ADD DEFAULT (GETDATE()) FOR [登録日時のカラム名] ADD DEFAULT はテーブルのカラムにデフォルト値を設定することができます。 GETDATE() はデータベースシステムのタイムスタンプを返しており、ADD DEFAULT のデフォルト値に指定することで、レコードの登録日時を自動登録することができます。 UPDATE時に更新日時を自動登録 対象のテーブルに対して、以下のSQLを実行することで、レコードの更新日時の自動登録が可能になります。 CREATE OR ALTER TRIGGER [トリガー名] ON [テーブル名] AFTER UPDATE AS BEGIN UPDATE [テーブル名] SET [更新日時のカラム名] = GETDATE() WHERE [プライマリキー] IN (SELECT [プライマリーキー] FROM inserted) END CREATE TRIGGER でレコードがUPDATEされたときに更新日時を自動登録するトリガーを作成することができます。 SELECT [プライマリーキー] FROM inserted の箇所についてですが、 insertedテーブルには、INSERT ステートメントおよび UPDATE ステートメントの実行で影響を受けた行のコピーが格納されています。 上記のSQLを実行すると、inserted テーブル内に存在するレコードを更新する際に、更新日時を自動登録するトリガーが作成されます。 おわりに 本記事は、SQL Serverにおいて、INSERT時に登録日時を、UPDATE時に更新日時を自動で登録する方法を紹介しました。 本記事が、SQL Serverを利用しているエンジニアの参考になれば、幸いです。 本サイトへのご意見、お問い合わせなどありましたらこちらからご連絡下さい。 お問合せフォーム a8adscript('body').