2009-04-01 6 views
8

Tengo una larga lista de SP (procedimiento almacenado) y funciones en mi servidor SQL db. Podría guardarlos uno por uno haciendo clic derecho y guión XXX a Alter A. ¿Hay alguna forma en TSQL de consultar todos los SP y guardarlas en archivos xxx.sql?¿Forma rápida de hacer copias de seguridad de SQL SP y funciones?

Por ejemplo, para sp_mySP1, me gustaría guardarlo en sp_mySP1.sql que es un archivo de texto. La base de datos es demasiado grande y me gustaría guardar solo los SP y funciones como respaldo de los códigos fuente.

+0

Tengo una función SaveToFile (xml, nombre de archivo) para guardar XML en un archivo. ¿No estoy seguro si puedo usar esta función para pasar los SP como xml al archivo? –

Respuesta

18

En estudio de administración; encuentre la base de datos, haga clic derecho, tareas, genere scripts;

siguiente hasta que elija "Tipos de objetos". Seleccione "Procedimientos almacenados" y "Funciones definidas por el usuario", luego, Seleccionar todo; elige una salida; ¡ir!

+0

¡Genial! Funciona a las mil maravillas. Lo único es que los datos no están escritos, me refiero a los scripts de inserción. Si hubiera opción de hacer eso para algunas tablas de pequeño tamaño, sería genial. –

+1

Bueno, solicitó SP y funciones. Para datos; Tareas -> Exportar datos –

+0

Puede secuenciar datos con tablas ... En la pantalla Generar opciones de scripts, establezca la opción 'Datos de scripts' en Verdadero. –

0

puede consultar syscomments para obtener su texto de creación de objetos sql, pero no sé cómo guardarlos en archivos separados utilizando solo TSQL.

select * from syscomments 
+0

Interesante. Supongo que la columna de texto es para los códigos fuente. Es como una línea larga larga. De todos modos, para averiguar el nombre de id para sp o el nombre de la función? –

+0

Puedes unirte a sysobjects. Supongo que puede averiguar cómo unirse a estos, ya que no tengo un entorno a la mano. –

+0

SELECT * FROM sysobjects –

4

1) Haga clic en su nombre de base de datos en el Explorador de objetos

2) Seleccione "tareas> generar scripts ..." en el menú de contexto

3) Seleccione su base de datos en la lista y haga clic en Siguiente

4) Haga clic en Siguiente en las opciones selecciona Guión

5) en Tipos de objetos, comprobar procedimientos almacenados y funciones definidas por el usuario, haga clic en Siguiente

6) Haga clic en Seleccionar todo en la pantalla de selección de procedimientos almacenados, haga clic en Siguiente

7) Haga clic en Seleccionar todo en la pantalla de selección de funciones, haga clic en Siguiente

8) Seleccione 'Script para Ventana Nueva consulta' y haga clic en Finalizar

3

Aquí hay un proceso que exportará ALGUNOS tipos de datos.

if exists (select * from sysobjects where name = 'ExportData_P') 
    drop proc ExportData_P 
go 

CREATE PROC dbo.ExportData_P ( 
    @tableName varchar(500), 
    @where varchar(5000) = '(1=1)' 
) 
AS 
BEGIN 
    SET NOCOUNT ON 

    DECLARE @sql varchar(8000) 
    DECLARE @fieldList varchar(8000) 
    DECLARE @valueList varchar(8000) 
    SELECT @fieldList = '', @valueList = '' 

    DECLARE @cols TABLE (column_name nvarchar(250), data_type varchar(250)) 
    DECLARE @c nvarchar(250), @data_type varchar(250) 

    INSERT INTO @cols 
    select column_name, data_type 
    from information_Schema.columns 
    where table_name = @tableName 


    WHILE EXISTS (SELECT TOP 1 * FROM @cols) 
    BEGIN 
     SELECT TOP 1 @c = column_name, @data_type = data_type FROM @cols 


     SELECT 
     @fieldList = @fieldList + @c + ', ', 
     @valueList = @valueList + CHAR(13) + 'case when ' + @c + ' is null then ''NULL'' else '''''''' + ' + 
      case when @data_type in ('text','ntext','char', 'nvarchar', 'varchar') then 
       ' REPLACE (REPLACE (REPLACE (' 
       else '' 
      end + 
      'IsNull (convert(varchar' + 
      (-- change this section to pass the length of varchar to convert 
       case when @data_type in ('uniqueidentifier') then '(50)' 
        when @data_type in ('text', 'ntext') then '(8000)' 
       else '' end 
      ) + 
      ', ' + 
      @c + 
      '), '''')' + -- end is null 
      case when @data_type in ('text','ntext','char', 'nvarchar', 'varchar') then 
       ', CHAR(39), CHAR(39)+CHAR(39)), CHAR(13), '''' + CHAR(13) + ''''), CHAR(9), '''' + CHAR(9) + '''') ' 
       else '' 
      end + 
      ' + '''''''' end + '', '' + ' 

     DELETE FROM @cols WHERE column_name = @c 
    END 

    SELECT @fieldList = LEFT (@fieldList, LEN(@fieldList)-1), 
     @valueList = LEFT (@valueList, LEN(@valueList)-1) 

    SELECT @sql = 'select ''insert into ' + @tableName + ' (' + @fieldList + ') ' + 
     ' VALUES (''+ ' + left (@valueList, len(@valueList)-5) + ''') '' from ' + @tableName + 
     ' WHERE ' + @where 

    -- into [#mcoe_temp_export' + @tableName + '] 
    print @sql 
    EXEC (@sql) 
    --EXEC ('select * from [#mcoe_temp_export' + @tableName + ']')   

    SET NOCOUNT OFF 
END 

go 

Uso como:

exec ExportData_P 'tablename' 
+0

cómo obtener una lista de nombres de tabla? Luego utilizo su SP para pasar por ... –

+1

seleccione la parte superior 10 * de sysobjects donde xtype = 'U' – Jamie

Cuestiones relacionadas