我只想使用触发器而不是插入和更新来在我的所有表上运行?怎么做?请帮我
问问题
82 次
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 回答