Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

OPENROWSET не приема променливи за своите аргументи (SQL Server)

Ако се опитвате да използвате 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        |
+---------+-------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да добавите ограничение по подразбиране към съществуваща колона в SQL Server

  2. Инсталиране на екземпляр на клъстер за отказване на SQL Server – част 1

  3. Как да промените настройките за конфигурация за поща на база данни в SQL Server (T-SQL)

  4. Проверете дали даден обект е съхранена процедура, като използвате OBJECTPROPERTY() в SQL Server

  5. SSMS версия 18 – няма диаграми на база данни