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 回答