Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

OPENROWSET akzeptiert keine Variablen für seine Argumente (SQL Server)

Wenn Sie versuchen, OPENROWSET zu verwenden Um eine verteilte Ad-hoc-Abfrage in SQL Server auszuführen, aber Sie erhalten immer wieder den Fehler „Falsche Syntax“ und Sie können einfach nichts Falsches an Ihrer Syntax erkennen, könnte es sein, dass Sie versuchen, eine Variable für eine von zu verwenden die Argumente.

Wie im Titel dieses Beitrags erwähnt, OPENROWSET akzeptiert keine Variablen für seine Argumente.

Wenn Sie Variablen als Argumente verwenden, versuchen Sie, diese in Zeichenfolgenliterale zu ändern.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

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

Ergebnis:

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

Wenn Sie die Microsoft-Dokumentation überprüfen, können Sie sehen, dass sie Folgendes ausdrücklich besagt:

OPENROWSET akzeptiert keine Variablen für seine Argumente.

Wenn wir also den obigen Code so ändern, dass alle Argumente String-Literale sind, erhalten wir keinen Fehler mehr.

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

Ergebnis:

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