Ако се опитвате да използвате OPENROWSET
за да стартирате ad hoc разпределена заявка в SQL Server, но продължавате да получавате грешка „неправилен синтаксис“ и просто не виждате нищо нередно в синтаксиса си, възможно е да се опитвате да използвате променлива за една от аргументите.
Както е споменато в заглавието на тази публикация, OPENROWSET
не приема променливи за своите аргументи.
Ако използвате променливи като аргументи, опитайте да ги промените на низови литерали.
Пример
Ето пример за демонстрация.
DECLARE @tsql varchar(500);
SET @tsql = 'SELECT * FROM Test.dbo.Cats';
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
@tsql);
Резултат:
Msg 102, Level 15, State 1, Line 16 Incorrect syntax near '@tsql'.
Ако проверите документацията на Microsoft, можете да видите, че в нея изрично е посочено, че:
OPENROWSET
не приема променливи за своите аргументи.
Така че, ако променим горния код, така че всички аргументи да са низови литерали, вече няма да получаваме грешка.
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
'SELECT * FROM Test.dbo.Cats');
Резултат:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+