none
Hola a todos, Tengo una consulta ¿Como puedo exportar registros de una tabla desde un procedimiento almacenado a un txt separa por "|"? BUKL puede importar pero exportar no lo sé como hacer por favor espero sus ayudas. RRS feed

Todas las respuestas

  • Hola

    Puedes hacer uso del asistente de EXPORTACION, propio del SSME, o bien, puedes hacer un ETL mediante SSDT para hacer un proyecto, acción mas "profesional"


    IIslas Master Consultant SQL Server

    viernes, 2 de agosto de 2019 16:37
  • Hola DorysCS:

    Lo primero que tienes que hacer es permitirle utilizar el procedimiento xp_cmdshell. Algo que por defecto y seguridad viene deshabilitado

    -- To allow advanced options to be changed.  
    EXEC sp_configure 'show advanced options', 1;  
    GO  
    -- To update the currently configured value for advanced options.  
    RECONFIGURE;  
    GO  
    -- To enable the feature.  
    EXEC sp_configure 'xp_cmdshell', 1;  
    GO  
    -- To update the currently configured value for this feature.  
    RECONFIGURE;  
    GO  

    Xp_CmdShell

    https://docs.microsoft.com/es-es/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option?view=sql-server-2017

    Una vez lo tienes configurado, te expongo una tabla como emplo.

    create table exportar (id int identity(1,1), nombre varchar(25), apellido varchar(50), edad int)
    go
    insert into exportar (nombre, apellido, edad)
    values
    ('ana' ,'alvarez',35),
    ('eva' ,'perez'  ,21),
    ('isa' ,'alis'   ,43),
    ('saúl','gomez'  ,14),
    ('luis','zua'    ,89);
    go
    /* con la tabla de ejmplo creada vamos con el procedure */
    
    CREATE PROCEDURE EXPORTAR_TXT (
    @PATH NVARCHAR(255)
    )
    AS 
    BEGIN
        DECLARE @COMMAND NVARCHAR(4000);
        DECLARE @SENTENCIA NVARCHAR(4000);
    /* el separador también lo podrías parametrizar */
        declare @separador char(1)= '|';
    /* la sentencia debe de contener el nombre de las tablas como servidor.esquema.tabla */
        SET @SENTENCIA = 'select id, nombre, apellido, edad from [foros].dbo.exportar';
        
        SET @Command = 'exec master..xp_cmdshell '
        + CHAR(39) + 'bcp "'+@SENTENCIA + '" queryout "'
        + @PATH + '" -T -c -t"'+@separador+'"' + CHAR(39) + ', no_output'
        
        EXECUTE sp_executesql @Command
    END
    GO

    La ejecución

    EXEC EXPORTAR_TXT 'C:\DEV\EJEMPLO.CSV';

    El archivo una vez creado:

    Salida

    Espero te ayude

    sábado, 3 de agosto de 2019 8:20