Usuário com melhor resposta
Como definir o caminho de um arquivo através de uma variável ao utilizar o OPENROWSET?

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 ****
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]
- Sugerido como Resposta André Renato Furtado sábado, 7 de maio de 2016 19:31
- Marcado como Resposta Rafael dos Santos Silva quinta-feira, 6 de julho de 2017 14:46
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]
- Sugerido como Resposta André Renato Furtado sábado, 7 de maio de 2016 19:31
- Marcado como Resposta Rafael dos Santos Silva quinta-feira, 6 de julho de 2017 14:46
-
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 ****
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 11 de maio de 2016 23:56
- Não Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 11 de maio de 2016 23:56
-
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]