none
Função OpenRowSet com datasheet variável é possível ? RRS feed

  • 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

    quarta-feira, 6 de fevereiro de 2013 14:53

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
    quarta-feira, 6 de fevereiro de 2013 16:20
  • 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
    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
    quarta-feira, 6 de fevereiro de 2013 16:20
  • 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

    quarta-feira, 6 de fevereiro de 2013 17:09
  • Estava pensando que se conseguise usar caracter coringa para completar o valor na frente da ABA - % . Isso seria uma boa opção.


    Att; Rafael

    quarta-feira, 6 de fevereiro de 2013 17:40
  • 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
    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]

    sexta-feira, 8 de fevereiro de 2013 15:44
  • Maravilha... deste modo funcionou tb!

    Att; Rafael

    sexta-feira, 8 de fevereiro de 2013 16:16