Pokud se pokoušíte použít OPENROWSET
Chcete-li spustit ad hoc distribuovaný dotaz na SQL Server, ale stále se vám zobrazuje chyba „nesprávná syntaxe“ a ve své syntaxi nevidíte nic špatného, je možné, že se pokoušíte použít proměnnou pro jednu z argumenty.
Jak je uvedeno v názvu tohoto příspěvku, OPENROWSET
nepřijímá proměnné pro své argumenty.
Pokud jako argumenty používáte proměnné, zkuste je změnit na řetězcové literály.
Příklad
Zde je příklad k demonstraci.
DECLARE @tsql varchar(500);
SET @tsql = 'SELECT * FROM Test.dbo.Cats';
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
@tsql);
Výsledek:
Msg 102, Level 15, State 1, Line 16 Incorrect syntax near '@tsql'.
Pokud se podíváte do dokumentace společnosti Microsoft, uvidíte, že je v ní výslovně uvedeno:
OPENROWSET
nepřijímá proměnné pro své argumenty.
Pokud tedy změníme výše uvedený kód tak, aby všechny argumenty byly řetězcové literály, již se nám nebude zobrazovat chyba.
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
'SELECT * FROM Test.dbo.Cats');
Výsledek:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+