2008-12-03 23 views
5

Gibt es einen einfachen Prozess in SQL 2005 zum Spucken aller gespeicherten Prozeduren in einzelne .SQL-Dateien. Ich möchte sie in VSS verschieben, bin aber nicht allzu begeistert von der Aussicht, auf jeden einzelnen zu klicken, um die Quelle zu erhalten, sie in eine Textdatei zu schreiben usw.Gespeicherte Prozeduren in .SQL-Dateien

Antwort

13

In SQL Management Studio mit der rechten Maustaste auf die Datenbank, gehen Sie zu Aufgaben -> Skripte erstellen, den Assistenten durchgehen. Auf einer der Seiten können Sie jedes Objekt in eine eigene Datei schreiben.

5

Sie können dies auswählen:

select 
    O.name, M.definition 
from 
    sys.objects as O 
left join 
    sys.sql_modules as M 
    on O.object_id = M.object_id 
where 
    type = 'P' 

und Sie erhalten den Namen und den Quellcode für gespeicherte Prozeduren. Wahrscheinlich einfachste Weise, wie man es in Dateien steckt, ist in einigen "klassischen" Sprachen wie C#, Java, etc ...

+0

Nice! Ich wusste nichts davon. – VVS

3

Wenn Sie Ihre gesamte Datenbank versionieren möchten, verfügt Microsoft über einen SQL Server-Assistenten zum Veröffentlichen von Datenbanken (Sie können es herunterladen here). Die Übersicht besagt, dass es eine direkte Integration mit Visual Studio gibt, aber ich habe es nicht persönlich verwendet, um zu bestätigen, wie gut (oder schlecht) es sein könnte.

2

Ich schrieb ein Werkzeug namens SMOscript, das eine Option zum Erstellen einer einzelnen .SQL-Datei pro Datenbankobjekt hat.

Sie verwendet die SMO-Bibliothek von SQL Server zum Generieren von CREATE- und DROP-Skripts.

1

Versuchen Sie Sql Server SMO zu verwenden. Ein Beispiel ist unten enthalten:

//C:\Program Files\Microsoft SQL Server\{version}\SDK\Assemblies\ 
using Microsoft.SqlServer; 
using Microsoft.SqlServer.Server; 
using Microsoft.SqlServer.Management.Smo; 
using Microsoft.SqlServer.Management.Common; 
using System.Data.SqlClient; 

string sqlConnectionString=""; 
string databaseName=""; 

var Connection = new SqlConnection(sqlConnectionString); 
Connection.Open(); 
int counter = 0; 
var db= new Server(new ServerConnection(Connection)).Databases[databaseName]; 

foreach (var item in db.StoredProcedures.OfType<StoredProcedure>()) 
{ 
    if (item.IsSystemObject == false) 
    { 
     using (TextWriter writer = new StreamWriter(item.Name+".sql", false)) 
     { 
      writer.WriteLine(item.TextHeader + item.TextBody); 
     } 
    } 
} 
1

Sie können auch das folgende Skript verwenden, um ausgewählte Datenbank gespeicherte Prozedur Skripte in einer separaten SQL-Datei zu generieren, Dateien mit Namen von Prozedur erstellen sein werden.

Mit dynamischer Abfrage und Cursor, können Sie es wie folgt tun:

DECLARE @name varchar(100) 
DECLARE @Definition varchar(max) 
DECLARE @sql varchar(300) 
CREATE TABLE TEMPTABLE (ID INT IDENTITY(1,1), def varchar(max)) 
DECLARE script CURSOR 
FOR 
SELECT OBJECT_NAME(SYS.SQL_MODULES.OBJECT_ID), [DEFINITION] FROM 
SYS.SQL_MODULES INNER JOIN SYS.OBJECTS ON 
SYS.OBJECTS.OBJECT_ID = SYS.SQL_MODULES.OBJECT_ID 
WHERE SYS.OBJECTS.TYPE='P' 
OPEN script 
FETCH NEXT FROM script INTO @name, @Definition 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    FETCH NEXT FROM script INTO @name, @Definition 
    INSERT INTO TEMPTABLE VALUES(@definition) 
    SET @Sql = ('BCP "SELECT TOP 1 def FROM TEMPTABLE ORDER BY ID DESC" queryout "C:\' + @name + '.sql" -c -T') 
    EXEC XP_CmdShell @Sql 
END 
CLOSE script 
DEALLOCATE script 
DROP TABLE TEMPTABLE 
Verwandte Themen