Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Heldernet

O que falta na minha SQL para exportar tabela virtual para txt?

Recommended Posts

/************************************************************************

Caro amigo, preciso fazer uma store procedure que exporta para um

arquivo TXT, o nome de todas as bases que contém uma tabela expecífica.

Fez a sql abaixo, que grave o nome das bases numa tabela virtual e

quando executo: SELECT * FROM @TAB_BASES é listado normalmente, porém quando

vou exportar de acordo com os exemplos mostrados na internet, gera um erro.

O que está errado ?

 

PS. COLOQUE ESSE SCRIPT NO SEU EDITOR E LEMBRE DE COLOCAR O NOME DE ALGUMA

TABELA QUE ESTEJA EM UMA OU MAS BASES DO SEU SERVER.

 

*************************************************************************/

 

 

sp_configure 'show advanced options', '1'
GO
Reconfigure With Override
Go

sp_configure 'xp_cmdshell', '1' 
GO
Reconfigure With Override
Go



DECLARE  @SQL Varchar(400),
        @BANCO VARCHAR(30),
	 @COUNT INT,
        @bcp VarChar(8000),
        @Status INT;

--tabela que identifica que localizou bases
DECLARE @TAB TABLE (NAME VARCHAR(50));

--tabela que armazenará as bases que serão listadas na combobox
DECLARE @TAB_BASES TABLE (NAME VARCHAR(50));

DECLARE TEMP_CR CURSOR                                                                                                   

  FOR SELECT NAME FROM master.sys.sysdatabases;                                                                          
	OPEN TEMP_CR

	FETCH NEXT FROM TEMP_CR INTO @BANCO;                                                                            

	WHILE @@fetch_status = 0                                                                                               
	BEGIN 
	  --INSERE REGISTRO QUALQUER NA TABELA, CASO CONTEM O CAMPO ESPECIFICADO 
	  INSERT INTO @TAB(NAME) 
	  exec('select name from '+@banco+'.sys.tables WHERE name=''COLOQUE_AQUI_NOME_DE_UM_CAMPO_DE_QUALQUER_TABELA_DE_ALGUM_BD''') 
         --EXEMPLO:
         --exec('select name from '+@banco+'.sys.tables WHERE name=''ID_CLIENTE''')  


	  SET  @COUNT = (SELECT COUNT(*) FROM @TAB )

	  --SE A TABELA TEMPORARIA POSSUI ALGUM REGISTRO, EXECUTA O BACKUP DA BASE POSICIONADA NO CURSOR
	  IF @COUNT > 0 
	  BEGIN
          INSERT INTO @TAB_BASES(NAME) VALUES(@BANCO)
	  END

	  DELETE FROM @TAB

	  FETCH NEXT FROM TEMP_CR INTO @BANCO;      
	END

      --Select * from @TAB_BASES

      SELECT @bcp = 'BCP "select * from @TAB_BASES " queryout N:\TEMP\teste.TXT -c -t[;] -r{#}\n -CP850 -T -Slocalhost'
      EXEC @Status = master.dbo.xp_cmdshell @bcp, no_output

      IF @Status <> 0
      BEGIN
         PRINT 'An error ocurred while generating the file: ' + convert(VarChar(50), @Status)
      END 
      ELSE
      Begin
         PRINT ' file generated succesfully.'
      End

CLOSE TEMP_CR;       
DEALLOCATE TEMP_CR; 


GO
sp_configure 'xp_cmdshell', '0' 
GO
Reconfigure With Override
Go

GO
SP_CONFIGURE 'show advanced options', '0'
GO
Reconfigure With Override
Go

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lembre-se que o que você está fazendo é montando um comando externo que vai ser rodado no shell, então é outra sessão e não vai reconhecer a variável que você está utilizando na stored procedure.

 

Você pode substituir a variável table por uma tabela temporária.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.