我有一个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)
-...
我有一个触发器,它从表中接收数据,我必须每天创建该触发器,并写入我的数据库。
无论如何都要创建单个触发器或每天创建一个自动创建触发器?
致以最诚挚的问候,
答案 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触发器,它会将此触发器添加到数据库中。