Se stai cercando di utilizzare OPENROWSET per eseguire una query distribuita ad hoc in SQL Server, ma continui a ricevere un errore di "sintassi errata" e semplicemente non riesci a vedere nulla di sbagliato nella tua sintassi, potrebbe essere che stai tentando di utilizzare una variabile per uno dei gli argomenti.
Come accennato nel titolo di questo post, OPENROWSET non accetta variabili per i suoi argomenti.
Se stai usando variabili come argomenti, prova a cambiarli in valori letterali stringa.
Esempio
Ecco un esempio da dimostrare.
DECLARE @tsql varchar(500);
SET @tsql = 'SELECT * FROM Test.dbo.Cats';
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
@tsql); Risultato:
Msg 102, Level 15, State 1, Line 16 Incorrect syntax near '@tsql'.
Se controlli la documentazione Microsoft, puoi vedere che afferma esplicitamente che:
OPENROWSETnon accetta variabili per i suoi argomenti.
Quindi, se cambiamo il codice sopra in modo che tutti gli argomenti siano stringhe letterali, non riceviamo più un errore.
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
'SELECT * FROM Test.dbo.Cats'); Risultato:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+