sql >> Databasteknik >  >> RDS >> Sqlserver

OPENROWSET accepterar inte variabler för sina argument (SQL Server)

Om du försöker använda OPENROWSET om du vill köra en ad hoc-distribuerad fråga i SQL Server, men du får hela tiden ett "felaktig syntax"-fel, och du bara inte kan se något fel med din syntax, kan det vara så att du försöker använda en variabel för en av argumenten.

Som nämnts i rubriken på detta inlägg, OPENROWSET accepterar inte variabler för sina argument.

Om du använder variabler som argument, försök att ändra dessa till strängliteraler.

Exempel

Här är ett exempel att visa.

DECLARE @tsql varchar(500);
SET @tsql = 'SELECT * FROM Test.dbo.Cats';
SELECT * FROM OPENROWSET(
    'SQLNCLI', 
    'Server=MyLinkedServer;Trusted_Connection=yes;', 
    @tsql);

Resultat:

Msg 102, Level 15, State 1, Line 16
Incorrect syntax near '@tsql'.

Om du kontrollerar Microsofts dokumentation kan du se att det uttryckligen står att:

OPENROWSET accepterar inte variabler för sina argument.

Så om vi ändrar ovanstående kod så att alla argument är strängliterala får vi inte längre ett felmeddelande.

SELECT * FROM OPENROWSET(
    'SQLNCLI', 
    'Server=MyLinkedServer;Trusted_Connection=yes;', 
    'SELECT * FROM Test.dbo.Cats');

Resultat:

+---------+-------------+
| CatId   | CatName     |
|---------+-------------|
| 1       | Meow        |
| 2       | Fluffy      |
| 3       | Scratch     |
| 4       | Bulldog     |
| 5       | King George |
| 6       | Sharp       |
| 7       | Fritz       |
| 8       | Garfield    |
| 9       | Boss        |
+---------+-------------+

  1. Behöver konvertera Oracle Merge till query till PostgreSQL

  2. Hur man återställer plåstret efter misslyckad cutover-fas i R12.2

  3. Android - SQLite - VÄLJ MELLAN Datum1 OCH Datum2

  4. TO_CHAR(datetime) Funktion i Oracle