Stored procedure per inserire il risultato di un OPENQEURY con parametri in una tabella locale
-
26-12-2019 - |
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!
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.