Domanda

Quindi questo è "divertente", e per "divertente" intendo strabiliante.Sono riuscito a:

  • Inserisci i parametri in OPENQUERY e ottieni risultati come questi:

    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)
    
  • Restituisci i risultati in diversi modi, inclusa una procedura memorizzata che accetta i miei parametri:

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

Ma quindi non sono stato in grado di inserire questi risultati in una tabella.Penso che se riesco a ottenere lo sproc restituito come tabella, ma la soluzione che ho trovato trasforma la query in una stringa e l'inserimento di tali risultati in una tabella ha prodotto solo errori.

L'altra cosa che ho provato è stata quella di inserire la porzione "Inserisci in" con la stringa, ma ciò genera errori relativi alle "etichette già utilizzate" o al fatto che il provider Oracle non ha accesso per scrivere sulle mie tabelle SQL.Ecco il mio tentativo.

    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)

Ho provato alcune altre cose che non pensavo avrebbero funzionato, solo per escluderle:

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

...e varie cose ridicole del genere.

Qualcuno può mostrarmi come posso applicare i risultati della prima query in un'istruzione "Insert Into DELTAS.TABLE ....."?

So di essere vicino, ma è da un po' che vago in tondo e mi sento come se mi pestassi la coda.

Grazie!

È stato utile?

Soluzione

Ci sei quasi.Funziona con le normali procedure memorizzate.Vediamo se funziona per gli SP che usano il mindbending OPENQUERY

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

Ovviamente l'elenco delle colonne dell'EXEC deve corrispondere alla tabella di destinazione.

Se ricevi errori postali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top