iscomar001
6/9/2015 - 7:43 PM

Guardar en un archivo un query

Guardar en un archivo un query

/*
DECLARE @strQuery varchar(max) = 'SELECT getDate(),getDate()'	--Query a ejecutar
DECLARE @strHeaders varchar(max) = 'FECHA_1,FECHA_2'			--Headers separados por coma y sin comilla sencilla
DECLARE @strName varchar(100) = 'NOMBRE_ARCHIVO'				--Nombre del archivo sin sufijo y sin extencion
DECLARE @pathFile varchar(200) = 'C:\pruebas\'					--Path donde se guardara
DECLARE @sufijo BIT = 1											-- 0.- NOMBRE_ARCHIVO.csv, 1.- NOMBRE_ARCHIVO_yyyyMMdd_HHmmss.csv
DECLARE @printHeaders BIT = 1									--Imprime los headers en el archivo
DECLARE @fileNameOut varchar(200)								--Variable con el archivo completo generado PATH+NOMBRE(C:\pruebas\NOMBRE_ARCHIVO_20150609_143449.csv)    

EXEC sp_SaveToFileHeadersFile @strQuery ,@strHeaders ,@strName ,@pathFile ,@sufijo ,@printHeaders ,@fileNameOut 
SELECT @fileNameOut
*/

ALTER PROCEDURE [dbo].[sp_SaveToFileHeadersFile]
@strQuery varchar(max),
@strHeaders varchar(max),
@strName varchar(100),
@pathFile varchar(200),
@sufijo BIT,
@printHeaders BIT,
@fileNameOut varchar(200) OUTPUT    

AS 
    DECLARE @bcpString varchar(1000);
    DECLARE @fileDataName varchar(200);
    DECLARE @fileHeadersName varchar(200);
    DECLARE @fileResultName varchar(200);
    DECLARE @fecha varchar(100);
    DECLARE @Existe int
BEGIN

    SET @fecha = '_' + convert(varchar, getdate(), 112) + '_' +  REPLACE(CONVERT(varchar(8),getdate(),114),':','');
    
    IF @sufijo IS NULL OR @sufijo = 0 BEGIN
		SET @fecha = '';
    END

    SELECT @fileHeadersName =  @pathFile + @strName + '_Headers' + @fecha + '.csv';
    SELECT @fileDataName =  @pathFile + @strName + '_Data' + @fecha + '.csv';
    SELECT @fileResultName =  @pathFile + @strName + @fecha + '.csv';
    SET @fileNameOut = @fileResultName;
    
    
    SET @strHeaders = ' SELECT ' + CHAR(39) + @strHeaders + CHAR(39)
    
    EXEC master.dbo.xp_fileexist @pathFile, @Existe OUT;
    
    IF @Existe = 0 BEGIN
		EXEC master.dbo.xp_create_subdir @pathFile;     
    END
    
    IF @printHeaders = 1 BEGIN
		
		SET @bcpString = 'bcp " ' + @strHeaders + ' " queryout "' + @fileHeadersName + '"  -c -t, -T -S ' + @@servername
		print @bcpString
		Exec master..xp_cmdShell @bcpString
				
		SET @bcpString = 'bcp " ' + @strQuery + ' " queryout "' + @fileDataName + '"  -c -t, -T -S ' + @@servername
		print @bcpString
		Exec master..xp_cmdShell @bcpString
	   
		SET @bcpString = 'type "' + @fileHeadersName + '" >> "' + @fileResultName +'"'
		print @bcpString
		Exec master..xp_cmdShell @bcpString
	   
		SET @bcpString = 'type "' + @fileDataName + '" >> "' + @fileResultName +'"'
		print @bcpString
		Exec master..xp_cmdShell @bcpString
		
		SET @bcpString = 'DEL "' + @fileHeadersName + '"'
		print @bcpString
		Exec master..xp_cmdShell @bcpString

		SET @bcpString = 'DEL "' + @fileDataName + '"'
		print @bcpString
		Exec master..xp_cmdShell @bcpString
    END ELSE BEGIN
		SET @bcpString = 'bcp " ' + @strQuery + ' " queryout "' + @fileResultName + '"  -c -t, -T -S ' + @@servername
		print @bcpString
		Exec master..xp_cmdShell @bcpString
    END
        
    RETURN;
	
END