2008-12-03 13 views
5

¿Hay un proceso simple en SQL 2005 para escupir todos mis procedimientos almacenados a archivos .sql individuales. Me gustaría moverlos a VSS, pero no estoy muy entusiasmado con la posibilidad de hacer clic en cada uno para obtener el origen, volcarlo en un archivo de texto, etc.Procedimientos almacenados a archivos .sql

Respuesta

13

En SQL Management Studio, haga clic derecho en la base de datos, vaya a tareas -> Generar scripts, recorra al mago. Una de las páginas le permitirá guionar cada objeto a su propio archivo.

5

Puede ejecutar esto seleccione:

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' 

y obtendrá el nombre y el código fuente para los procedimientos almacenados. La manera más fácil de usar, cómo ponerlo en los archivos es en algunos lanzamientos "clásicos" como C#, java, etc ...

+0

Nice! No sabía sobre eso. – VVS

3

Si desea versionar toda su base de datos, Microsoft tiene un Asistente de publicación de bases de datos de SQL Server (puede descargarlo here). La descripción general dice que hay una integración directa con Visual Studio, pero no lo he usado personalmente para dar fe de lo bueno (o malo) que podría ser.

2

Escribí una herramienta que llamé SMOscript que tiene una opción para crear un solo archivo .sql por objeto de base de datos.

Utiliza la biblioteca SMO de SQL Server para generar scripts CREATE y DROP.

1

Intente utilizar Sql Server SMO. Un ejemplo se incluye a continuación:

//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

También puede utilizar el siguiente script para generar bases de datos almacenada secuencias de procedimientos seleccionados en un archivo .sql separada, los archivos se crean por el nombre del procedimiento.

Usando consulta dinámica y el cursor, puede hacerlo de esta manera:

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 
Cuestiones relacionadas