sql >> Database teknologi >  >> RDS >> Sqlserver

OPENROWSET accepterer ikke variabler for sine argumenter (SQL-server)

Hvis du prøver at bruge OPENROWSET at køre en ad hoc distribueret forespørgsel i SQL Server, men du bliver ved med at få en "forkert syntaks" fejl, og du kan bare ikke se noget galt med din syntaks, kan det være, at du forsøger at bruge en variabel til en af argumenterne.

Som nævnt i titlen på dette indlæg, OPENROWSET accepterer ikke variabler for sine argumenter.

Hvis du bruger variabler som argumenter, så prøv at ændre disse til strenge bogstaver.

Eksempel

Her er et eksempel til at demonstrere.

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'.

Hvis du tjekker Microsoft-dokumentationen, kan du se, at der udtrykkeligt står følgende:

OPENROWSET accepterer ikke variabler for sine argumenter.

Så hvis vi ændrer ovenstående kode, så alle argumenter er strenge bogstaver, får vi ikke længere en fejl.

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. PostgreSQL-replikering til disaster recovery

  2. SELECT-forespørgsel returnerer 1 række fra hver gruppe

  3. PostgreSQL vs MySQL, en sammenligning

  4. Sikkerhedsovervejelser for MariaDB-implementeringer på Hybrid Cloud-miljø