rdb

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

  • 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 TRIGGER [トリガー名] ON TABLE AFTER UPDATE AS BEGIN UPDATE TABLE 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を利用しているエンジニアの参考になれば、幸いです。