Pergunta

Então isso é "divertido", e por "divertido" quero dizer alucinante.Eu consegui:

  • Alimente parâmetros para OPENQUERY e obtenha resultados como este:

    Declare @MyString    varchar(max)
    ,       @TheDateAfter datetime
    
    set     @TheDateAfter = DATEADD(d, 1, @TheDate)
    set     @MyString =  'Select * from "ORACLEDB"."' + @TheTable + '"
                         WHERE "EDITTIME" > to_date(''' +         convert(varchar(30),@TheDate,120) + ''', ''YYYY-MM-DD HH24:MI:SS'')
                         AND "EDITTIME" < to_date(''' +         convert(varchar(30),@TheDateAfter,120) + ''', ''YYYY-MM-DD HH24:MI:SS'')'
    set     @MyString =  N'select * from   openquery  (LINKEDSERVER
                                                  ,    ''' + REPLACE(@MyString, '''',         '''''') + '''
                                                  )'
    
    Exec(@MyString)
    
  • Retorne os resultados de várias maneiras, incluindo um procedimento armazenado que usa meus parâmetros:

    sp_get_Deltas @TheDate = '1/2/03', @TheTable = 'Table'
    

Mas, portanto, não consegui inserir esses resultados em uma tabela.Acho que se eu conseguir o sproc retornar como uma tabela, mas a solução que encontrei transforma a consulta em uma string e colocar esses resultados em uma tabela só resultou em erros.

A outra coisa que tentei foi colocar a parte "Inserir em" com a string, mas isso gerou erros sobre "rótulos já sendo usados" ou que o provedor Oracle não tem acesso para gravar em minhas tabelas SQL.Aqui estava minha tentativa.

    Declare @MyString    varchar(max)
    ,       @TheDateAfter datetime

    set     @TheDateAfter = DATEADD(d, 1, @TheDate)
    set     @MyString =  'Insert Into [HO-RS1].[DELTAS].[dbo].[' + @TheTable +         '] 
                         Select * from "ORACLEDB"."' + @TheTable + '"
                         WHERE "EDITTIME" > to_date(''' +         convert(varchar(30),@TheDate,120) + ''', ''YYYY-MM-DD HH24:MI:SS'')
                         AND "EDITTIME" < to_date(''' +         convert(varchar(30),@TheDateAfter,120) + ''', ''YYYY-MM-DD HH24:MI:SS'')'
    set     @MyString =  N'select * from   openquery  (LINKEDSERVER
                                                  ,    ''' + REPLACE(@MyString, '''',         '''''') + '''
                                                  )'

    Exec(@MyString)

Tentei algumas outras coisas que achei que não funcionariam, apenas para descartá-las:

    Insert Into DELTAS.TABLE
    Select * From sp_get_Deltas @TheDate = '1/2/03', 'TheTable'

...e várias coisas ridículas como essa.

Alguém pode me mostrar como posso aplicar os resultados da primeira consulta em uma instrução "Insert Into DELTAS.TABLE ....."?

Eu sei que estou perto, mas já faz algum tempo que ando andando em círculos e sinto como se estivesse pisando no meu rabo.

Obrigado!

Foi útil?

Solução

Você está quase lá.Isso funciona para procedimentos armazenados normais.Vamos ver se funciona para SPs que usam mindbending OPENQUERY

Insert Into DELTAS.TABLE
EXEC sp_get_Deltas @TheDate = '1/2/03', 'TheTable'

É claro que a lista de colunas do EXEC deve corresponder à tabela de destino.

Se você receber erros, poste-os.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top