每天自动创建一个触发器

时间:2015-03-31 05:49:07

标签: sql-server database triggers

我有一个MSSQL GPS数据库,它每月创建一个数据库,每天创建一个表。这是一个每3秒获取一次数据的实时数据库。所有操作都是通过GPS程序制作的,我没有源代码或访问权限。

数据库看起来像这样:

      -Comms201502       (Database)
      -Comms201503       (Database)
      -Comms201504       (Database)
         -GPS20150401    (Database's Table)
         -GPS20150402    (Database's Table)
         -GPS20150403    (Database's Table)
         -GPS20150404    (Database's Table)
         -...

我有一个触发器,它从表中接收数据,我必须每天创建该触发器,并写入我的数据库。

无论如何都要创建单个触发器或每天创建一个自动创建触发器?

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:1)

我会创建一个DDL触发器,每次执行CREATE TABLE语句时都会引发该触发器,然后向新表添加一个触发器以将记录记录到表中,例如:

CREATE TRIGGER trg_DDLCreateTrigger ON DATABASE 
    FOR  CREATE_TABLE
AS 
BEGIN
    SET NOCOUNT ON;
    DECLARE @EventData XML = EVENTDATA();

    DECLARE @Schema SYSNAME 
    DECLARE @TableName SYSNAME

    SELECT @Schema = EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(max)'),
            @TableName = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(max)')

    DECLARE @sql VARCHAR(MAX)

    SET @sql = 'CREATE TRIGGER [trg_' + @TableName + '] ON [' + @Schema + '].[' + @TableName + ']' +
    ' AFTER INSERT AS ' +
    ' INSERT INTO MyTable SELECT * FROM inserted' --Change this as required

EXEC (@Sql)  

END
GO

您应该在触发器中添加一些验证,以检查该表是否是您有兴趣捕获的表。

您可以扩展它,以便在create database语句上有一个DDL触发器,它会将此触发器添加到数据库中。