我有SQL Server 2008 R2。我在數據庫中有大約150個表格,並且每個表格最近都創建了觸發器。它在我的本地環境中工作正常。僅使用腳本嚮導生成觸發器的腳本
現在我想將它們部署在我的實時環境中。問題是我想只部署觸發器。 我嘗試了Generate Script wizard
,但它正在創建具有表格架構的腳本以及觸發器,而不是僅觸發器。
是否有無論如何生成所有的觸發器下降和創建類型的腳本?
我有SQL Server 2008 R2。我在數據庫中有大約150個表格,並且每個表格最近都創建了觸發器。它在我的本地環境中工作正常。僅使用腳本嚮導生成觸發器的腳本
現在我想將它們部署在我的實時環境中。問題是我想只部署觸發器。 我嘗試了Generate Script wizard
,但它正在創建具有表格架構的腳本以及觸發器,而不是僅觸發器。
是否有無論如何生成所有的觸發器下降和創建類型的腳本?
忘記嚮導。我認爲你必須用代碼弄髒你的手。下面的腳本打印所有觸發器代碼並將其存儲到表中。只需複製腳本的打印輸出或從#triggerFullText中獲取。
USE YourDatabaseName
GO
SET NOCOUNT ON;
CREATE TABLE #triggerFullText ([TriggerName] VARCHAR(500), [Text] VARCHAR(MAX))
CREATE TABLE #triggerLines ([Text] VARCHAR(MAX))
DECLARE @triggerName VARCHAR(500)
DECLARE @fullText VARCHAR(MAX)
SELECT @triggerName = MIN(name)
FROM sys.triggers
WHILE @triggerName IS NOT NULL
BEGIN
INSERT INTO #triggerLines
EXEC sp_helptext @triggerName
--sp_helptext gives us one row per trigger line
--here we join lines into one variable
SELECT @fullText = ISNULL(@fullText, '') + CHAR(10) + [TEXT]
FROM #triggerLines
--adding "GO" for ease of copy paste execution
SET @fullText = @fullText + CHAR(10) + 'GO' + CHAR(10)
PRINT @fullText
--accumulating result for future manipulations
INSERT INTO #triggerFullText([TriggerName], [Text])
VALUES(@triggerName, @fullText)
--iterating over next trigger
SELECT @triggerName = MIN(name)
FROM sys.triggers
WHERE name > @triggerName
SET @fullText = NULL
TRUNCATE TABLE #triggerLines
END
DROP TABLE #triggerFullText
DROP TABLE #triggerLines
謝謝。儘管我以不同的方式解決了我的問題,但您的解決方案最好使用。非常感謝 :) – Dev
嘗試使用高級選項。看到這個答案: http://stackoverflow.com/a/13200622/139388 –