Als u OPENROWSET
. probeert te gebruiken om een ad-hoc gedistribueerde query uit te voeren in SQL Server, maar je krijgt steeds een "onjuiste syntaxis" -fout en je kunt gewoon niets verkeerds zien aan je syntaxis, het kan zijn dat je een variabele probeert te gebruiken voor een van de argumenten.
Zoals vermeld in de titel van dit bericht, OPENROWSET
accepteert geen variabelen voor zijn argumenten.
Als je variabelen als argumenten gebruikt, probeer deze dan te veranderen in letterlijke tekenreeksen.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
DECLARE @tsql varchar(500);
SET @tsql = 'SELECT * FROM Test.dbo.Cats';
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
@tsql);
Resultaat:
Msg 102, Level 15, State 1, Line 16 Incorrect syntax near '@tsql'.
Als u de Microsoft-documentatie bekijkt, kunt u zien dat hierin expliciet staat dat:
OPENROWSET
accepteert geen variabelen voor zijn argumenten.
Dus als we de bovenstaande code wijzigen zodat alle argumenten letterlijke tekenreeksen zijn, krijgen we geen foutmelding meer.
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
'SELECT * FROM Test.dbo.Cats');
Resultaat:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+