Om du försöker använda OPENROWSET
om du vill köra en ad hoc-distribuerad fråga i SQL Server, men du får hela tiden ett "felaktig syntax"-fel, och du bara inte kan se något fel med din syntax, kan det vara så att du försöker använda en variabel för en av argumenten.
Som nämnts i rubriken på detta inlägg, OPENROWSET
accepterar inte variabler för sina argument.
Om du använder variabler som argument, försök att ändra dessa till strängliteraler.
Exempel
Här är ett exempel att visa.
DECLARE @tsql varchar(500);
SET @tsql = 'SELECT * FROM Test.dbo.Cats';
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
@tsql);
Resultat:
Msg 102, Level 15, State 1, Line 16 Incorrect syntax near '@tsql'.
Om du kontrollerar Microsofts dokumentation kan du se att det uttryckligen står att:
OPENROWSET
accepterar inte variabler för sina argument.
Så om vi ändrar ovanstående kod så att alla argument är strängliterala får vi inte längre ett felmeddelande.
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
'SELECT * FROM Test.dbo.Cats');
Resultat:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+