none
Gerar arquivo txt com o resultado RRS feed

  • Pergunta

  • <object height="0" id="2ac9c8ca-0858-9290-b989-5abb19aca78d" type="application/gas-events-abn" width="0"></object>Pessoal tenho uma pergunta tenho a seguinte procedure: 
    ALTER PROCEDURE [dbo].[VERIFICAMFD]
    AS
    BEGIN
       DECLARE @CAMPO VARCHAR(MAX);
       DECLARE @LGACHOU VARCHAR(1);
       SET @CAMPO = '';
       SET @LGACHOU = 'N';
      
       CREATE TABLE #TEMPARQUIVO(
                                LINHA VARCHAR(MAX)
                                );
                                
       bulk insert #TEMPARQUIVO 
              from 'C:\TEMP\MFD.TXT'
              with ( 
    		         CODEPAGE = 'ACP',
                     rowterminator = '\n'
                    );
    
        
    	DECLARE ANALISAARQUIVO01 CURSOR FOR 
        select * from #TEMPARQUIVO
        OPEN ANALISAARQUIVO01
        FETCH NEXT FROM ANALISAARQUIVO01 INTO @CAMPO
        WHILE @@FETCH_STATUS = 0
        BEGIN
            IF (@CAMPO LIKE 'ITEM CÓDIGO DESCRIÇÃO QTD.UN.VL UNIT(R $) ST VL ITEM(R $)')
    		BEGIN 
    		    PRINT @CAMPO;
    			SET @LGACHOU = 'Y';
    		END
    				 
    		IF (@LGACHOU = 'Y') AND (@CAMPO <> 'ITEM CÓDIGO DESCRIÇÃO QTD.UN.VL UNIT(R $) ST VL ITEM(R $)')
    		BEGIN 
    		    PRINT @CAMPO;
    			IF (@CAMPO LIKE '                              ------------------')
    			BEGIN
    			    SET @LGACHOU = 'N';
    			END
    		END
              
            FETCH NEXT FROM ANALISAARQUIVO01 INTO @CAMPO;
        END
    
    	CLOSE ANALISAARQUIVO01;
        DEALLOCATE ANALISAARQUIVO01;
    	DROP TABLE #TEMPARQUIVO
                                     
       
    
        
    END
    /* Fim da Procedure */
    
    Como eu faço para ao invês do print exibir o resultado na aba mensagens do sql imprimir em um arquivo txt? O que eu quero é gerar um arquivo txt com o comando print que estou usando é possível?
    terça-feira, 28 de maio de 2013 13:49

Todas as Respostas

  • Olá Eder...

    Aqui você encontra um artigo ótimo sobre o assunto.

    À disposição....


    Não esqueça de marcar o post como útil caso tenha te ajudado.

    terça-feira, 28 de maio de 2013 15:03
  • Eder, vc pode utilizar também o integration services para exportação do arquivo texto.

    É muito simples de utilizar.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    terça-feira, 28 de maio de 2013 15:10
  • ALTER PROCEDURE [dbo].[VERIFICAMFD]
    AS
    BEGIN
       DECLARE @CAMPO VARCHAR(MAX);
       DECLARE @LGACHOU VARCHAR(1);
       DECLARE @CMD2 VARCHAR(MAX)
       SET @CAMPO = '';
       SET @LGACHOU = 'N';
      
       CREATE TABLE #TEMPARQUIVO01(
                                LINHA VARCHAR(MAX)
                                );
    
    
       CREATE TABLE #TEMPARQUIVO02(
                                LINHA VARCHAR(MAX)
    							);
                                
       bulk insert #TEMPARQUIVO01 
              from 'C:\TEMP\MFD.TXT'
              with ( 
    		         CODEPAGE = 'ACP',
                     rowterminator = '\n'
                    );
    
        
    	DECLARE ANALISAARQUIVO01 CURSOR FOR 
        select * from #TEMPARQUIVO01
        OPEN ANALISAARQUIVO01
        FETCH NEXT FROM ANALISAARQUIVO01 INTO @CAMPO
        WHILE @@FETCH_STATUS = 0
        BEGIN
            IF (@CAMPO LIKE 'ITEM CÓDIGO DESCRIÇÃO QTD.UN.VL UNIT(R $) ST VL ITEM(R $)')
    		BEGIN 
    		    /*PRINT @CAMPO;*/
    			SET @LGACHOU = 'Y';
    			INSERT INTO #TEMPARQUIVO02 (LINHA)
    			SELECT @CAMPO;
    		END
    				 
    		IF (@LGACHOU = 'Y') AND (@CAMPO <> 'ITEM CÓDIGO DESCRIÇÃO QTD.UN.VL UNIT(R $) ST VL ITEM(R $)')
    		BEGIN 
    		    /*PRINT @CAMPO;*/	
    			INSERT INTO #TEMPARQUIVO02 (LINHA)
    			SELECT @CAMPO;		
    			IF (@CAMPO LIKE '                              ------------------')
    		    BEGIN
    		        SET @LGACHOU = 'N';
    		    END
    		END	
    				          
            FETCH NEXT FROM ANALISAARQUIVO01 INTO @CAMPO;
        END
    
    	CLOSE ANALISAARQUIVO01;
        DEALLOCATE ANALISAARQUIVO01;
    
    	
        declare @sql varchar(MAX)
    
        select @sql = 'bcp [PHARMACY-PRUD]..#TEMPARQUIVO02 out c:\temp\TESTE.TXT -c -t, -T -S'+ @@servername 
    
        exec master..xp_cmdshell @sql
    
    		
    	/*SELECT * FROM #TEMPARQUIVO02*/
    	DROP TABLE #TEMPARQUIVO01;
    	DROP TABLE #TEMPARQUIVO02;
    
    
                                     
       
    
        
    END
    /* Fim da Procedure */
    
    
    
    GO
    
    

    Pessoal só que esta reportando o seguinte erro:

    Mensagem 214, Nível 16, Estado 201, Procedimento xp_cmdshell, Linha 1
    Procedure expects parameter 'command_string' of type 'varchar'.

    Alguem poderia me ajudar?

    terça-feira, 28 de maio de 2013 18:15
  • Ele não aceita o varchar(max), coloca com um limite numérico...
    quarta-feira, 29 de maio de 2013 11:30
  • Fiz à alteração porém ainda retornou o seguinte erro:

    SQLState = 01000, NativeError = 2701
    Warning = [Microsoft][SQL Server Native Client 11.0][SQL Server]Nome do banco de dados 'PHARMACY-PRUD' ignorado, fazendo referência a objeto em tempdb.
    SQLState = 37000, NativeError = 11525
    Error = [Microsoft][SQL Server Native Client 11.0][SQL Server]Não foi possível determinar os metadados porque a instrução 'select * from [PHARMACY-PRUD]..#TEMPORIGINAL' usa uma tabela temporária.
    NULL

    Será que não é possível utilzar tabela temporária para exportar os dados? O nome do meu banco que estou usando se chama realmente [PHARMACY-PRUD] e a tabela estão corretos.

    quarta-feira, 29 de maio de 2013 12:15
  • Eder,

    Tente criar esta tabela temporária como uma temporário global passando o ## antes do nome da tabela, pois uma temporário local provavelmente não será possível.

    Outro detalhe toda table temp é criada fisicamente no banco de dados TEMPDB ele existe somente logicamente no banco que você criou.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sexta-feira, 31 de maio de 2013 01:55