none
Como definir o caminho de um arquivo através de uma variável ao utilizar o OPENROWSET? RRS feed

  • Pergunta

  • Pessoal, Boa tarde.

    Estou tentando ler alguns arquivos xml através do OPENROWSET (BULK) na qual tenho o seguinte código:

    DECLARE @caminho_XML AS VARCHAR(200) = 'C:\XML\testeXquery.xml'
    
    
    SELECT 
    	infProt.query('chNFe').value('.', 'VARCHAR(44)')
    FROM 
    	( 
    		SELECT CAST(X AS XML) 
    		FROM OPENROWSET( BULK @caminho_XML , SINGLE_BLOB) AS T(X) 
    		
    	) AS T(X) 
    CROSS APPLY X.nodes('nfeProc/protNFe/infProt') AS X(infProt)
    

    Neste caso o SQL retorna um erro dizendo que o caminho deve ser uma string ou text_lex. 

    Andei pesquisando na net para tentar concatenar a variável entre string, por exemplo: ''' + @caminho_xml + ''' , e mesmo assim não funcionou .

    Vi também que o pessoal esta sugerindo usar o EXEC () , mas no meu caso, não é muito viável, uma vez que o meu código esta grande e complexo demais para trabalhar desta maneira.

    Resumindo, alguém consegue me ajudar? 

    Desde já vlwwww!!!!


    **** SER A RESPOSTA FOR UTIL, NÃO ESQUEÇA DE MARCA-LÁ =P ****

    terça-feira, 3 de maio de 2016 19:21

Respostas

  • Rafael,

    Então, neste caso o uso da variável acaba conflitando com a forma que o OpenRowSet trabalho, pois ele não reconhece um valor dinâmico, ou seja, ele não vai reconhecer o valor que esta dentro da variável, pois ele trabalho de forma fixa.

    Antes da sua execução o OpenRowSet realiza a leitura do caminho do arquivo que esta sendo passado, para ter a certeza da estrutura e validação do conteúdo existente dentro do mesmo.

    A solução de utilizar o comando Exec() transformando o seu comando em algum dinâmico acaba sendo a solução mais viável.

    A quantidade de arquivos que você vai trabalhar é grande?

    Teve uma vez que tive justamente uma necessidade similar a sua, eram 20 arquivos eu montei uma tabela com o caminho de cada arquivo e dentro de uma Stored Procedure eu fazia uso desta tabela, varrendo a lista de arquivo e montando o meu comando em tempo de execução, fazendo as devidas concatenações do Select com o OpenRowSet e passando o caminho dos arquivos dentro do OpenRowSet.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 5 de maio de 2016 15:23

Todas as Respostas

  • Rafael,

    Então, neste caso o uso da variável acaba conflitando com a forma que o OpenRowSet trabalho, pois ele não reconhece um valor dinâmico, ou seja, ele não vai reconhecer o valor que esta dentro da variável, pois ele trabalho de forma fixa.

    Antes da sua execução o OpenRowSet realiza a leitura do caminho do arquivo que esta sendo passado, para ter a certeza da estrutura e validação do conteúdo existente dentro do mesmo.

    A solução de utilizar o comando Exec() transformando o seu comando em algum dinâmico acaba sendo a solução mais viável.

    A quantidade de arquivos que você vai trabalhar é grande?

    Teve uma vez que tive justamente uma necessidade similar a sua, eram 20 arquivos eu montei uma tabela com o caminho de cada arquivo e dentro de uma Stored Procedure eu fazia uso desta tabela, varrendo a lista de arquivo e montando o meu comando em tempo de execução, fazendo as devidas concatenações do Select com o OpenRowSet e passando o caminho dos arquivos dentro do OpenRowSet.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 5 de maio de 2016 15:23
  • Sim, então! É um pouco grande a quantidade.. Mas valeu pela dica! Gostei muito da ideia da tabela com os caminhos e executa-la em uma stored procedure

    Abraços!!!


    **** SER A RESPOSTA FOR UTIL, NÃO ESQUEÇA DE MARCA-LÁ =P ****

    quinta-feira, 5 de maio de 2016 19:41
  • Rafael,

    Ok, veja se realmente esta dica pode ser útil, depois nos informe a resolução.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 11 de maio de 2016 23:56