none
Procedimento xp_cmdshell com erro num Banco de Dados e funcionando em outro!? RRS feed

  • Pergunta

  • Estou com um problema em executar o comando abaixo:

    INSERT INTO EMPRESA.DBO.TEMPOR EXEC xp_cmdshell 'findstr /b "|" C:\IMPORTA\TESTE\teste.txt'

    O detalhe é que assim, ele executa normalmente:

    INSERT INTO TESTE.DBO.TEMPOR EXEC xp_cmdshell 'findstr /b "|" C:\@IMPORTA\TESTE\teste.txt'

    As tabelas são idênticas! Único detalhe é que nesse último fiz os testes (deu certo!) e ao executar na EMPRESA ocorre o seguinte erro:

    Mensagem 213, Nível 16, Estado 7, Procedimento xp_cmdshell, Linha 1
    Column name or number of supplied values does not match table definition.

    Pelo que pesquisei poderia estar relacionado ao problema com o xp_cmdshell e executei o script abaixo na tentativa de corrigir:

    EXECUTE sp_configure 'show advanced options', 1
    RECONFIGURE WITH OVERRIDE
    GO

    EXECUTE sp_configure 'xp_cmdshell', '1'
    RECONFIGURE WITH OVERRIDE
    GO

    EXECUTE sp_configure 'show advanced options', 0
    RECONFIGURE WITH OVERRIDE
    GO

    Infelizmente, não corrige nada!! Alguma sugestão ?

    O que mais estranho é o fato de executar no TESTE e não na EMPRESA... =(

    quinta-feira, 21 de janeiro de 2016 13:28

Respostas

  • Ufa, consegui!!!

    O correto neste campo é assim:

    ID INTEGER IDENTITY (1,1)

    (inicio, incremento)

    Daí ficou 10!

    • Marcado como Resposta MLRamos quinta-feira, 21 de janeiro de 2016 17:48
    quinta-feira, 21 de janeiro de 2016 17:18

Todas as Respostas

  • MLRamos,

    Verifique primeiramente se o número e nome das colunas é idêntico no seu arquivo e em cada umas das tabelas.

    Tente também realizar a especificação das colunas na cláusula de INSERT.

    Exemplo:

    INSERT INTO TESTE.DBO.TEMPOR (Coluna01, Coluna02, Coluna03)
    EXEC xp_cmdshell 'findstr /b "|" C:\@IMPORTA\TESTE\teste.txt'


    Felipe Lauffer MCSA: SQL Server | MCP

    • Sugerido como Resposta Marcos SJ quinta-feira, 21 de janeiro de 2016 17:01
    • Não Sugerido como Resposta Marcos SJ quinta-feira, 21 de janeiro de 2016 18:23
    quinta-feira, 21 de janeiro de 2016 13:33
  • FLauffer,

    As tabelas são idênticas, mas aqui abro um parenteses, é algo como segue:

    CREATE TABLE TEMPOR (ID integer Not null, LINHA varchar(999))

    O arquivo para carga TESTE.TXT fica TODO salvo em LINHA e o primeiro campo (ID) assume automaticamente um número sequencial a cada linha do arquivo lido...

    Li muito sobre comandos como este:

    ID uniqueidentifier DEFAULT NEWSEQUENTIALID() not null

    Mas ainda não resolvi a questão, então não é exatamente isso... =(

    quinta-feira, 21 de janeiro de 2016 17:05
  • MLRamos,

    Verifique primeiramente se o número e nome das colunas é idêntico no seu arquivo e em cada umas das tabelas.

    Tente também realizar a especificação das colunas na cláusula de INSERT.

    Exemplo:

    INSERT INTO TESTE.DBO.TEMPOR (Coluna01, Coluna02, Coluna03)
    EXEC xp_cmdshell 'findstr /b "|" C:\@IMPORTA\TESTE\teste.txt'


    Felipe Lauffer MCSA: SQL Server | MCP

    MLRamos,

    Perfeito. Você já tentou especificar as colunas na cláusula de INSERT como informado anteriormente?



    Felipe Lauffer MCSA: SQL Server | MCP

    quinta-feira, 21 de janeiro de 2016 17:08
  • Ufa, consegui!!!

    O correto neste campo é assim:

    ID INTEGER IDENTITY (1,1)

    (inicio, incremento)

    Daí ficou 10!

    • Marcado como Resposta MLRamos quinta-feira, 21 de janeiro de 2016 17:48
    quinta-feira, 21 de janeiro de 2016 17:18