2017-04-23 3 views
1

Ich verwende den folgenden Code Get-Code der Trigger in der ausgewählten Datenbank abgeschlossen.Generieren Sie Skripts für Trigger in SQL Server

select [definition] +' ' + 'GO' 
from sys.sql_modules m 
inner join sys.objects obj on obj.object_id=m.object_id 
where obj.type ='TR' 

Voraussetzung: Ich mag den oben Trigger-Code als C:\TMP\Trigger.sql mit Hilfe von T-SQL exportieren, anstatt Skripte generiert Codierung Skript-Assistenten. Ich bin nicht so stark in SQL Server. Kann mir jemand dabei helfen?

+0

könnten Sie die Ergebnisse verwenden Option in SSMS-Datei und meistens werden Sie gut, nicht einen Server zur Zeit zu testen, aber ich habe nicht ein Problem mit Ihrem Skript sehen – TheGameiswar

+0

meine Anforderung ist ich brauche um Ergebnisse als .sql zu exportieren, die als Job in sql integriert werden können, der auf anderer Instanz läuft, so kann ich mich auf die GUI verlassen – Franklin

Antwort

1

Um die Skripterstellung über einen Stapeljob zu planen, sollten Sie ein Powershell-Skript oder SSIS verwenden. Powershell-Skript Beispiel:

try { 

    Add-Type -Path "C:\Program Files\Microsoft SQL Server\130\SDK\Assemblies\Microsoft.SqlServer.Smo.dll"; 

    $databaseName = "AdventureWorks2014"; 
    $sqlServerName = "."; 
    $scriptPath = "c:\Scripts\TriggerScripts.sql"; 

    $SMOserver = New-Object Microsoft.SqlServer.Management.Smo.Server($sqlServerName); 
    $scriptr = new-object ('Microsoft.SqlServer.Management.Smo.Scripter') ($SMOserver); 

    If (Test-Path $scriptPath) { 
     Remove-Item $scriptPath; 
    } 

    $database = $SMOserver.databases[$databaseName] 

    $objectsToScript = @(); 

    foreach($table in $database.Tables) { 
     $objectsToScript += $table.Triggers; 
    } 

    $scriptr.Options.FileName = $scriptPath; 
    $scriptr.Options.AnsiFile = $false; 
    $scriptr.Options.AllowSystemObjects = $false; 
    $scriptr.Options.IncludeIfNotExists = $false; 
    $scriptr.Options.NoCommandTerminator = $false; 
    $scriptr.Options.ScriptBatchTerminator = $true; 

    $null = $scriptr.Script($objectsToScript); 

} 
catch [Exception] { 
    $e = $_.Exception 
    $e.ToString(); 
    throw; 
} 
+0

Danke Dan. Gibt es eine Möglichkeit, T-SQL-Code oder PROCEEDURE anstelle von PS zu vereinfachen und zu verwenden, so ist PS auf unser Produkt beschränkt. – Franklin

+0

Der schwierige Teil einer T-SQL Only-Lösung ist das Erstellen der Datei. Wie würden Sie das in T-SQL machen? Wenn Ihre Organisation Powershell gesperrt hat, würde ich erwarten, dass das Erstellen von Dateien in T-SQL ein absolutes No-No ist. Vielleicht ist SSIS akzeptabler Mittelweg. –