sql >> Database >  >> RDS >> Sqlserver

OPENROWSET accepteert geen variabelen voor zijn argumenten (SQL Server)

Als u OPENROWSET . probeert te gebruiken om een ​​ad-hoc gedistribueerde query uit te voeren in SQL Server, maar je krijgt steeds een "onjuiste syntaxis" -fout en je kunt gewoon niets verkeerds zien aan je syntaxis, het kan zijn dat je een variabele probeert te gebruiken voor een van de argumenten.

Zoals vermeld in de titel van dit bericht, OPENROWSET accepteert geen variabelen voor zijn argumenten.

Als je variabelen als argumenten gebruikt, probeer deze dan te veranderen in letterlijke tekenreeksen.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

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

Resultaat:

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

Als u de Microsoft-documentatie bekijkt, kunt u zien dat hierin expliciet staat dat:

OPENROWSET accepteert geen variabelen voor zijn argumenten.

Dus als we de bovenstaande code wijzigen zodat alle argumenten letterlijke tekenreeksen zijn, krijgen we geen foutmelding meer.

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

Resultaat:

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

  1. SQL is gelijk aan (=) Operator voor beginners

  2. Database maken in MySQL

  3. Maak een tabel van twee typen in PostgreSQL

  4. Wat is in SQL / MySQL het verschil tussen ON en WHERE in een join-instructie?