none
Usar o EXEC com varias variaveis varchar(8000) RRS feed

  • Pergunta

  •  

    Estou montando um comando com variáveis varchar(8000) e ao final executando com o EXEC.

    Exemplo:

     

    Declare @comando1 varchar(8000),

                @comando2 varchar(8000),

                @comando3 varchar(8000)

     

    set @comando1 = ' create procedure SP_Teste ....

                                ....

                               '   

     

    como os comando para a criacao dessa SP_Teste é muito grande, eu preciso usar outras variaveis para continuar a montagem do comando.

     

    set @comando2 = '  ....................................'

     

    e assim usando qtas variáveis forem necessárias para montar o comando.

     

    Depois das variaveis prontas, eu executa o EXEC assim:

     

    Exec (@comando1+@comando2+@comando3)

     

    O problema é que o EXEC não está conseguindo executar por causa do tamanho das variáveis.

     

    Reforçando... eu só preciso executar um string enorme e o EXEC não está suportando.

     

    Alguém me sugere alguma outra forma para executar este comando?

     

     

    quinta-feira, 28 de fevereiro de 2008 12:49

Todas as Respostas

  • vc. pode gravar todo o conteudo da procedure em um arquivo .sql e executar pelo ( sql 2000 ) osql ou (sql 2005 ) sqlcmd, passando por um cmdshell por exemplo,

     

    qualquer coisa retorne.

     

    Abs;

    quinta-feira, 28 de fevereiro de 2008 13:04
  • eu havia pensado em usar o osql, mas passando o comando para ele e executar vi cmdshell , mas pensei que ia dar na mesma. Executar o osql lendo um arquivo .sql é uma otima ideia.

    Agora preciso ver como salvar esse script em uma arquivo.

     

    Obrigado

    quinta-feira, 28 de fevereiro de 2008 13:12
  • vc. pode usar um bcp queryout passando o comando completo, uma ideia

     

    Abs;

     

    quinta-feira, 28 de fevereiro de 2008 13:25
  • Rs.... deu certo!

     

     

     

    Mto obrigado.

     

     

    quinta-feira, 28 de fevereiro de 2008 13:37
  • Thiago,

     

    Desculpe-me estou entrando agora neste post.

     

    Você conseguiu utilizar uma variável varchar?

    quinta-feira, 28 de fevereiro de 2008 13:43
  •  

    Sim

     

    eu criei uma tabela auxiliar

     

    create table Auxiliar (comando1 varchar(8000), comando2 varchar(8000),comando3 varcahr(8000))

     

    depois inseri nela os valores das variaveis

     

    em seguida usei o bcp para gerar o arquivo.

     

    .....agora estou com seguinte problema:

     

    O BCP executa certinho no DOS mas da problemas de permissao qdo executado no Managment Studio.

     

    PQ hein ?

    quinta-feira, 28 de fevereiro de 2008 14:06
  • Thiago,

     

    Problemas de permissão?

    quinta-feira, 28 de fevereiro de 2008 14:09
  • Como que eu consigo executar pelo DOS o BCP e nao consigo via query analyzer ou management studio ?

     

    Estou usando SQL 2005

    quinta-feira, 28 de fevereiro de 2008 14:16
  • Thiago,

     

    Mas qual é a mensagem de erro que esta sendo apresentada na execução do Management Studio?

     

    quinta-feira, 28 de fevereiro de 2008 14:19
  •  

     

     

    direitos na xp_cmdshell ?
    quinta-feira, 28 de fevereiro de 2008 14:21
  •  

    Este eh o erro:

     

    SQLState = 42000, NativeError = 229
    Error = [Microsoft][SQL Native Client][SQL Server]SELECT permission denied on object 'RPL_Instalador', database 'master', schema 'dbo'.
    NULL

     

    qdo eu uso pelo query ou no studio

     

    no DOS sem problemas

    quinta-feira, 28 de fevereiro de 2008 14:24
  • so que se eu executar o xp_cmdshel 'dir :c:\'  funciona

     

     

    quinta-feira, 28 de fevereiro de 2008 14:26
  • Isso tudo eh pq eu desenvolvi uma ferramenta em SQL para replicar dados automaticamente entre servidores SQL.

     

    Já uso a ferramente com 8 servidores e mais de 400 tabelas replicando sem nenhum problema entre os servidores.

    Tudo isso em SQL.

     

    Só que agora eu tenho uma tabela com muitossss campos. Ai as variavies que criam todos os comandos necessarios para a replicacao funcionar nao estavam cabendo.

     

    o BCP foi a solucao sugerido pelo Marcelo que resolveu perfeitamente.

     

    Só explicando o motivo já que vcs estão sendo atenciosos.  Agradeço a ajuda de vcs!

    quinta-feira, 28 de fevereiro de 2008 14:31
  • Thiago,

     

    Esta quantidade de campos esta acima de 256?

     

    Pois na replicação esta quantidade de colunas não é aceita, ou seja, se você deseja replicar uma table inteira com mais de 256 colunas o SQL Server vai abortar.

     

    quinta-feira, 28 de fevereiro de 2008 14:35
  • Tem 90 campos.

     

    quinta-feira, 28 de fevereiro de 2008 14:40
  • Neste momento meu problema sera resolvido se eu conseguir executar o BCP através do query ou m. studio.

     

     

      declare @comandoshell nvarchar(4000)
      set @comandoshell = N'BCP "select * from master.dbo.RPL_Instalador" QUERYOUT C:\RPL_Instalador.sql -S. -T -c'
      EXEC master..XP_CMDSHELL @comandoshell

     

    Nao da certo..... so no DOS.

     

    Tente vc fazer igual ai na sua base usando uma tabela que vc possua.  Estou usando o SQL 2005.

    Ve se da certo.

     

      EXEC master..XP_CMDSHELL 'dir c:'       -- da certo em qq lugar

     

    quinta-feira, 28 de fevereiro de 2008 14:45
  • Acabei de perceber outra coisa...

     

    No SQL2000 tb da certo .... so estou com problemas no SQL2005   ..... deve ter alguma config. para liberar isso!

    Nao eh possivel

    quinta-feira, 28 de fevereiro de 2008 14:51
  • Resolvido

    quinta-feira, 28 de fevereiro de 2008 16:14