[英]Recreate an existing Trigger on Table Drop/Create?
我有一個保險索賠表(此示例為 TableX)和一個審計表(TableXAudit)。 與 TableX 關聯的觸發器在 Insert、Update 和 Delete 上插入記錄(正如您所期望的審計觸發器所做的那樣)。 但是,隨着項目的充實,TableX 仍在修改(添加/刪除列)。 我發現,使用 Drop/Create Table 腳本來更改表會導致觸發器被刪除但沒有重新創建。
我的問題; 有沒有辦法保留表 Drop/Create 上的觸發器?
謝謝。
我知道這很舊,但這似乎適用於常見情況。 它創建一個腳本來刪除和重新創建觸發器。 然后,您可以將放置表代碼放在其中。
CREATE TABLE #commands_to_build (
ID INT IDENTITY(1,1),
command NVARCHAR(max)
)
DECLARE @schema_name sysname = 'your_schema_name_here'
DECLARE @table_name_to_change sysname = 'your_table_name_here'
DECLARE @row_num int
SELECT
s.name AS [schema_name],
o.Name AS TriggerName,
c.text,
t.name AS table_name
INTO #triggercode
FROM
dbo.SysObjects o
INNER JOIN dbo.sysComments c
ON o.ID = c.ID
inner join sys.tables t
ON t.object_id = o.parent_obj
INNER JOIN sys.schemas s
ON s.schema_id = t.schema_id
WHERE
o.Type = 'TR'
AND t.name = @table_name_to_change
AND s.name = @schema_name
ORDER BY s.name, t.name, o.name
INSERT INTO #commands_to_build (command)
SELECT X.command
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY TriggerName) * 2 AS row_num,
'DISABLE TRIGGER [' + TriggerName + '] ON [' + @schema_name + '].[' + @table_name_to_change + ']' AS command
FROM #triggercode
UNION
SELECT ROW_NUMBER() OVER (ORDER BY TriggerName) * 2 -1, 'GO'
FROM #triggercode
) X
ORDER BY X.row_num
Select @row_num = Count(*) From #triggercode
IF @row_num > 0
BEGIN
/* This rigamorole inserts a GO command between every create and enable trigger command,
in a grouping of four commands, GO, CREATE, GO, ENABLE since they each must be the first of a batch */
INSERT INTO #commands_to_build (command)
SELECT X.command
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY TriggerName) * 4 - 3 AS row_num,
'GO' AS command
FROM #triggercode
UNION
SELECT ROW_NUMBER() OVER (ORDER BY TriggerName) * 4 - 2,
[text]
FROM #triggercode
UNION
SELECT ROW_NUMBER() OVER (ORDER BY TriggerName) * 4 - 1,
'GO'
FROM #triggercode
UNION
SELECT ROW_NUMBER() OVER (ORDER BY TriggerName) * 4 AS row_num,
'ENABLE TRIGGER [' + TriggerName + '] ON [' + @schema_name + '].[' + @table_name_to_change + ']' AS command
FROM #triggercode
) X
ORDER BY X.row_num
end
SELECT * FROM #commands_to_build
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.