SQL SP_EXECSQL @VAR gestire un ApriQuery “dinamica”
-
12-10-2019 - |
Domanda
Ho un OpenQuery (Utilizzato in SQL2005 per eseguire una query su un database legacy). Sto costruendo la stringa per eseguire in modo che io tornerò gli ultimi 6 mesi di dati.
Il problema che sto avendo è con '||' a concat.
Questo funziona sul sistema legacy:
SELECT
EVENT_DATE || ' ' || EVENT_TIME as EVENTDateTime
FROM
EVENT
Questo funziona in SQL2005 via collegato SQL Server:
Declare @Query nvarchar(MAX)
Set @Query = N'
SELECT
*
FROM
OPENQUERY(PATCOMLIVE,
''SELECT
*
FROM
root.ESDB_EVENT as EV
''
) as OpenQ';
exec sp_executesql @Query
Questo non funziona:
Declare @Query nvarchar(MAX)
Set @Query = N'
SELECT
*
FROM
OPENQUERY(PATCOMLIVE,
''SELECT
EVENT_DATE || '' '' || EVENT_TIME
FROM
root.ESDB_EVENT as EV
''
) as OpenQ';
exec sp_executesql @Query
Né questo:
EVENT_DATE '|'| '' '' '|'| EVENT_TIME
Lo so che mi manca qualcosa di semplice ... ma il || per concating stringhe è rovinare le cose, anche se lo fa il lavoro sul sistema legacy di per sé.
Soluzione
Hai ragione, non funziona perché la sua non è l'invio di una stringa completa al OPENQUERY
, si può provare due cose. In primo luogo, concatenando il '
destra, dovrebbe essere simile a questo:
Set @Query = N'
SELECT
*
FROM
OPENQUERY(PATCOMLIVE,
''SELECT
EVENT_DATE || '''' '''' || EVENT_TIME
FROM
root.ESDB_EVENT as EV
''
) as OpenQ';
Oppure si può provare concatenando le colonne in SQL, in questo modo:
Set @Query = N'
SELECT
*, EVENT_DATE + '' '' + EVENT_TIME
FROM
OPENQUERY(PATCOMLIVE,
''SELECT
*
FROM
root.ESDB_EVENT as EV
''
) as OpenQ';