【发布时间】:2013-11-16 10:47:31
【问题描述】:
我写了一个触发器,当更新Employee 表时触发。
当触发器触发时,它将新记录插入Transact 表。
ALTER TRIGGER [PROJECTS].[after_updateEmployee] ON [PROJECTS].[Employee]
AFTER UPDATE
AS DECLARE @tablen varchar(30) , @modyfire varchar(15),@modyfied_date datetime,@columname varchar(20),@action varchar(6)
SET @tablen ='Employee'
set @modyfire =(SELECT SYSTEM_USER)
set @modyfied_date =(select CURRENT_TIMESTAMP)
SET @columname = (SELECT TOP 1 E_id FROM PROJECTS.Employee ORDER BY RV DESC)
set @action ='UPDATE'
BEGIN
INSERT INTO PROJECTS.Transact values(@tablen,@modyfire,@modyfied_date,@columname,@action)
END
我的数据库中有更多表。那么有什么方法可以为我的数据库中的所有表使用此触发器。
谢谢。
【问题讨论】:
-
触发器被定义在在一张桌子上——没有像全局触发器这样的概念。如果您想在 10 个表上触发,则必须编写 10 个触发器 - 每个表上一个。
-
如果你的触发器遵循一个模式——我假设你的模式是这样的——你应该能够通过在
information_schema上运行select语句然后自动应用触发器来生成一个脚本(通过运行脚本)。 -
添加到以前的 cmets - 您可以通过创建 DDL 触发器为新创建的表自动化它,该触发器将向新表添加适当的触发器。
-
SQL Server 触发器有两个重要的警告信号。第一个是如果触发器假定只有一行被插入/更新/删除。第二个是如果触发器不包含对
inserted和/或deleted伪表的任何引用。此触发器似乎同时存在这两个问题。
标签: sql sql-server sql-server-2008 tsql