Sql server 2005 多表触发器SQL Server noob

Sql server 2005 多表触发器SQL Server noob,sql-server-2005,Sql Server 2005,我有一大堆表,它们都有相同的2个datetime列(lastModDate、DateAdd)。 我想知道是否可以为这些表设置全局插入更新触发器来设置日期时间值。如果没有,有什么办法 非常受欢迎的任何指针不,没有“全局”触发器或多表触发器。触发器是按设计绑定到表的,因此如果需要在一堆表上使用触发器,则需要创建一堆触发器,每个表一个,然后部署它们。恐怕没有办法解决这个问题。您可以为插入(DateAdd)使用默认值,为更新使用表触发器 差不多 CREATE TABLE MyTable (

我有一大堆表,它们都有相同的2个datetime列(lastModDate、DateAdd)。 我想知道是否可以为这些表设置全局插入更新触发器来设置日期时间值。如果没有,有什么办法


非常受欢迎的任何指针

不,没有“全局”触发器或多表触发器。触发器是按设计绑定到表的,因此如果需要在一堆表上使用触发器,则需要创建一堆触发器,每个表一个,然后部署它们。恐怕没有办法解决这个问题。

您可以为插入(DateAdd)使用默认值,为更新使用表触发器

差不多

CREATE TABLE MyTable (
        ID INT,
        Val VARCHAR(10),
        lastModDate DATETIME DEFAULT CURRENT_TIMESTAMP, 
        dateAdded DATETIME DEFAULT CURRENT_TIMESTAMP
)
GO

CREATE TRIGGER MyTableUpdate ON MyTable
FOR UPDATE
AS
UPDATE  MyTable
SET     lastModDate = CURRENT_TIMESTAMP
FROM    MyTable mt INNER JOIN
        inserted i ON mt.ID = i.ID
GO

INSERT INTO MyTable (ID, Val) SELECT 1, 'A'
GO

SELECT *
FROM MyTable
GO

UPDATE MyTable
SET Val = 'B' 
WHERE ID = 1
GO

SELECT *
FROM MyTable
GO

DROP TABLE MyTable
GO

我同意没有这样的全局触发器,但我们当然可以通过创建脚本来减少我们的工作量,该脚本将为表生成触发器

类似于:

为所有表生成触发器 我这样做最初是为了为数据库中的所有表生成触发器以审核数据更改,这非常简单,只需将整个行从已删除表移动到镜像审核表

但是有人想跟踪桌子上的活动,所以它稍微简单一点。在这里,我们创建一个日志表,每当dml操作发生时,它都被写入其中

享受


由于代码将是相同的,并且只有表名称将被更改。。。
我认为最好的方法是创建一个程序,然后从每个触发器调用这个程序

谢谢,这种想法只是希望而已。我可以在这里使用一些常规的配置。谢谢,这就是我的想法。我仍然需要每个表都有一个更新触发器,对吗?这很有趣。谢谢
USE Northwind GO

CREATE TABLE LOG_TABLE (Add_dttm datetime DEFAULT (GetDate()),
TABLE_NAME sysname, Activity char(6)) GO

DECLARE @sql varchar(8000), @TABLE_NAME sysname SET NOCOUNT ON

SELECT @TABLE_NAME = MIN(TABLE_NAME) FROM INFORMATION_SCHEMA.Tables

WHILE @TABLE_NAME IS NOT NULL   BEGIN  SELECT @sql = 'CREATE TRIGGER
[' + @TABLE_NAME + '_Usage_TR] ON [' + @TABLE_NAME +'] '   + 'FOR
INSERT, UPDATE, DELETE AS '   + 'IF EXISTS (SELECT * FROM inserted)
AND NOT EXISTS (SELECT * FROM deleted) '   + 'INSERT INTO LOG_TABLE
(TABLE_NAME,Activity) SELECT ''' + @TABLE_NAME + ''', ''INSERT''' + '
'   + 'IF EXISTS (SELECT * FROM inserted) AND EXISTS (SELECT * FROM
deleted) '   + 'INSERT INTO LOG_TABLE (TABLE_NAME,Activity) SELECT '''
+ @TABLE_NAME + ''', ''UPDATE''' + ' '   + 'IF NOT EXISTS (SELECT * FROM inserted) AND EXISTS (SELECT * FROM deleted) '   + 'INSERT INTO
LOG_TABLE (TABLE_NAME,Activity) SELECT ''' + @TABLE_NAME + ''',
''DELETE''' + ' GO'  SELECT @sql  EXEC(@sql)  SELECT @TABLE_NAME =
MIN(TABLE_NAME) FROM INFORMATION_SCHEMA.Tables WHERE TABLE_NAME >
@TABLE_NAME    END SET NOCOUNT OFF