我有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 –