SQL Server 2008を使用していて、更新中のテーブルに「Last_Updated」というフィールドがあるかどうかを確認する汎用更新トリガーを作成する方法があるかどうかを知りたい場合、そのフィールドをgetDate()関数で更新します。汎用更新トリガーのヘルプが必要
私のdbのすべてのテーブルで動作するような汎用トリガを作成できますか?
ありがとうございました!
SQL Server 2008を使用していて、更新中のテーブルに「Last_Updated」というフィールドがあるかどうかを確認する汎用更新トリガーを作成する方法があるかどうかを知りたい場合、そのフィールドをgetDate()関数で更新します。汎用更新トリガーのヘルプが必要
私のdbのすべてのテーブルで動作するような汎用トリガを作成できますか?
ありがとうございました!
いいえ、テーブルごとにトリガーを設定するか、すべてのUPDATEにLast_Updated=GETDATE
を含める必要があります。このクエリはLast_Updated
列を持つすべてのテーブルに対してCreate Trigger
コマンドを生成します
SELECT
'CREATE TRIGGER [tr_u_'+TABLE_SCHEMA+'_'+TABLE_NAME+'] ON ['+TABLE_SCHEMA+'].['+TABLE_NAME+']'
+'AFTER UPDATE AS '
+'UPDATE ['+TABLE_SCHEMA+'].['+TABLE_NAME+'] '
+' SET Last_Updated=GETDATE() '
+' FROM ['+TABLE_SCHEMA+'].['+TABLE_NAME+'] A '
+' INNER JOIN INSERTED i ON a.pk=i.pk '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='LastChgDate' --'Last_Updated'
:
はこれを試してみてください。あなたはそれぞれのコマンドを編集し、それぞれのテーブルのa.pk=i.pk
を正しい列に修正しなければなりません。その後、すべてのコマンドを実行すると、すべてのトリガーが得られます。新しいテーブルを追加するときにトリガーを追加する必要があります。
トリガーでschema_information.tablesビューを相互参照し、すべてのテーブルにトリガーを設定することができますが、これは醜い方法です。あなたは、ユニバーサルトリガーを持つのではなく、各テーブルのためにこれを行ういくつかのコードジェネレーターを書いた方が良いでしょう。
同意します。ジェネリックとデータベースは混在しません... – gbn
それはそれを持っています。ありがとうございました! – Ryan