1

すべてのテーブルで実行するために、挿入と更新の代わりにトリガーを使用したいだけですか? どうやってするの?私を助けてください

4

2 に答える 2

0

データベース内のテーブルごとにトリガーを作成する必要があるようです。テーブル ループで SQL ステートメントを動的に作成し、そのコマンドを実行できます。

簡単な例(結果をテキスト形式で出力)

DECLARE @triggerName nvarchar(50) = 'triggerName'
SELECT 'IF OBJECT_ID(''' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(@triggerName) + ''')' + 
       ' IS NOT NULL DROP TRIGGER ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + 
       QUOTENAME(@triggerName) + CHAR(13) + CHAR(10) +
       'GO' + CHAR(13) + CHAR(10) +
       'CREATE TRIGGER ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' +
       QUOTENAME(@triggerName) + ' ON ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + 
       QUOTENAME(OBJECT_NAME(object_id)) + CHAR(13) + CHAR(10) +
       'INSTEAD OF INSERT, UPDATE' + CHAR(13) + CHAR(10) +
       'AS' + CHAR(13) + CHAR(10) +
       'BEGIN' + CHAR(13) + CHAR(10) +
       '  SELECT ''your_logic''' + CHAR(13) + CHAR(10) +      
       'END' + CHAR(13) + CHAR(10) +
       'GO' + CHAR(13) + CHAR(10) +
       '' + CHAR(13) + CHAR(10)      
FROM sys.tables
于 2013-01-22T23:20:32.763 に答える
0

SQL Server では、DML 操作 (テーブルごと) およびデータベース全体 (DDL トリガー) でトリガーを使用できます。構文は他のシステムでもほぼ同じだと思います。

最初の構文は次のとおりです。

CREATE TRIGGER name ON table
   [FOR/AFTER/INSTEAD OF]
   [INSERT, UPDATE, DELETE]
AS
BEGIN
--SQL statements
...
END

DDL トリガーは、主に監査のためにあまり使用されませんが、監査を行うためのより良い方法があります。とにかく、いくつかの例でこの記事をチェックしてください。

于 2013-01-22T13:25:59.940 に答える