Usuário com melhor resposta
Função OpenRowSet com datasheet variável é possível ?

Pergunta
-
Olá meus caros,
Gostaria de saber se é possível executar a seguinte select, com o parametro de onde passo o nome da Aba(datasheet) com uma variável :
SELECT * INTO PLANILHA FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\caminho\planilha.xlsx', ['ABA - 29012013$'])
Tenho que realizar importação de planilhas mensalmente só que a ABA que existe na planilha vem com o nome ABA - DATA.
Para não alterar o modo como é feita a planilha gostaria de colocar um caracter coringa no parametro.. exemplo: ...['ABA - %$'])...
Alguem já enfrentou um problema parecido ou tem alguma ideia ?
Att; Rafael
Respostas
-
Rafael,
Veja se este exemplo ajuda:
Declare @NomePlanilha Varchar(20), @Comando Varchar(500) Set @NomePlanilha = 'ABA - '+Convert(VarChar(10),GetDate(),103) Set @Comando = 'SELECT * INTO PLANILHA FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;Database=C:\caminho\planilha.xlsx'', ['+@NomePlanilha+'$])' Exec(@Comando)
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Marcado como Resposta Rafael.IT sexta-feira, 8 de fevereiro de 2013 15:41
-
Para quem for útil segue a solução que encontrei com ajuda do nosso amigo Junior Galvão - MVP
Declare @NomePlanilha Varchar(20),
@Comando Varchar(500)
Set @NomePlanilha = 'ABA - '+Convert(VarChar(10),GetDate(),103)+'$'
Set @Comando = 'SELECT * INTO PLANILHA
FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',
''Excel 12.0;Database=C:\caminho\planilha.xlsx'', ['''+@NomePlanilha+'''])'
Exec(@Comando)
Realizei um trace para ver o que estava sendo passado para a OLEDB,
a diferença encontrada foi a falta das marcações ' antes do nome da aba, deste modo escrito acima
com três ''' é passado corretamente a instrução para o OLEDB e o exec funciona.
Obrigado Junior.
Abs geral.
Att; Rafael
- Marcado como Resposta Rafael.IT sexta-feira, 8 de fevereiro de 2013 15:41
Todas as Respostas
-
Rafael,
Veja se este exemplo ajuda:
Declare @NomePlanilha Varchar(20), @Comando Varchar(500) Set @NomePlanilha = 'ABA - '+Convert(VarChar(10),GetDate(),103) Set @Comando = 'SELECT * INTO PLANILHA FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;Database=C:\caminho\planilha.xlsx'', ['+@NomePlanilha+'$])' Exec(@Comando)
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Marcado como Resposta Rafael.IT sexta-feira, 8 de fevereiro de 2013 15:41
-
Junior sua contribuição já foi de grande ajuda, mas veja... no exemplo que dei eu estava enfrentando o seguinte problema
para aba que tem [NOME COM ESPAÇO$] a sintaxe não compreende ex:
Não funciona:
SELECT* INTO PLANILHAFROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\caminho\planilha.xlsx',[ABA - 29012013$])
Funciona:
SELECT* INTO PLANILHAFROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\caminho\planilha.xlsx',['ABA - 29012013$'])
Com o SET que você me passou somente precisei remover os "/" do codigo e ficou assim:
Set @NomePlanilha = 'ACOV - '+REPLACE(CONVERT(VARCHAR(10), GETDATE(), 103), '/', '')
Esta variável @NomePlanilha está exatamente como preciso, só q ao tentar colocar as dentro de ' ' do jeito que funciona o negocio não vai !
rsrs
alguma ideia ?
Att; Rafael
-
-
Para quem for útil segue a solução que encontrei com ajuda do nosso amigo Junior Galvão - MVP
Declare @NomePlanilha Varchar(20),
@Comando Varchar(500)
Set @NomePlanilha = 'ABA - '+Convert(VarChar(10),GetDate(),103)+'$'
Set @Comando = 'SELECT * INTO PLANILHA
FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',
''Excel 12.0;Database=C:\caminho\planilha.xlsx'', ['''+@NomePlanilha+'''])'
Exec(@Comando)
Realizei um trace para ver o que estava sendo passado para a OLEDB,
a diferença encontrada foi a falta das marcações ' antes do nome da aba, deste modo escrito acima
com três ''' é passado corretamente a instrução para o OLEDB e o exec funciona.
Obrigado Junior.
Abs geral.
Att; Rafael
- Marcado como Resposta Rafael.IT sexta-feira, 8 de fevereiro de 2013 15:41
-
Rafael,
Tente assim:
Declare @NomePlanilha Varchar(20), @Comando Varchar(500) Set @NomePlanilha = 'ABA - '+Convert(VarChar(10),GetDate(),103) Set @Comando = 'SELECT * INTO PLANILHA FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;Database=C:\caminho\planilha.xlsx'', ['+''''+@NomePlanilha+'$'+'''])' Exec(@Comando)
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Sugerido como Resposta Samuel Rodrigues dos Anjos sexta-feira, 8 de fevereiro de 2013 23:23
-