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