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:
OPENROWSET
non 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 | +---------+-------------+