sql >> Databáze >  >> RDS >> Sqlserver

OPENROWSET nepřijímá proměnné pro své argumenty (SQL Server)

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        |
+---------+-------------+

  1. Zkopírujte tabulky z jedné databáze do druhé na SQL Server

  2. Výkon sys.partitions

  3. Pgbackrest Restore and Restore Delta

  4. SQL Server, zavádějící XLOCK a optimalizace