2013-01-19 25 views
7

Mam program SQL Server 2008 R2. Mam około 150 tabel w bazie danych i dla każdej tabeli ostatnio utworzone wyzwalacze. Działa dobrze w moim lokalnym środowisku.Generowanie skryptu dla wyzwalaczy tylko przy użyciu kreatora skryptu

Teraz chcę wdrożyć je w środowisku na żywo. Pytanie brzmi: chcę wdrożyć tylko wyzwalacze. Próbowałem Generate Script wizard, ale tworzy on skrypt ze schematem tabeli wraz z wyzwalaczami, tylko wyzwalaczami NOT.

Czy mimo to można wygenerować wszystkie wywołania wyzwalaczy i utworzyć skrypt typu?

+1

Spróbuj użyć opcji zaawansowanych. Zobacz tę odpowiedź: http://stackoverflow.com/a/13200622/139388 –

Odpowiedz

8

Zapomnij o wizycie. Myślę, że musisz zabrudzić sobie ręce za pomocą kodu. Poniższy skrypt wypisuje kod wszystkich wyzwalaczy i zapisuje go w tabeli. Po prostu skopiuj wydruk skryptu lub pobierz go z #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 
+1

Dzięki. Chociaż rozwiązałem problem w inny sposób, lepiej użyć rozwiązania. Wielkie dzięki :) – Dev

Powiązane problemy