Jeśli próbujesz użyć OPENROWSET
uruchomić zapytanie rozproszone ad hoc w programie SQL Server, ale wciąż pojawia się błąd „nieprawidłowej składni” i po prostu nie widać niczego złego w składni, może to oznaczać, że próbujesz użyć zmiennej dla jednego z argumenty.
Jak wspomniano w tytule tego posta, OPENROWSET
nie akceptuje zmiennych dla swoich argumentów.
Jeśli używasz zmiennych jako argumentów, spróbuj zmienić je na literały łańcuchowe.
Przykład
Oto przykład do zademonstrowania.
DECLARE @tsql varchar(500);
SET @tsql = 'SELECT * FROM Test.dbo.Cats';
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
@tsql);
Wynik:
Msg 102, Level 15, State 1, Line 16 Incorrect syntax near '@tsql'.
Jeśli sprawdzisz dokumentację firmy Microsoft, zobaczysz, że wyraźnie stwierdza ona, że:
OPENROWSET
nie akceptuje zmiennych dla swoich argumentów.
Jeśli więc zmienimy powyższy kod tak, aby wszystkie argumenty były literałami łańcuchowymi, nie otrzymamy już błędu.
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
'SELECT * FROM Test.dbo.Cats');
Wynik:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+