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

OPENROWSET non accetta variabili per i suoi argomenti (SQL Server)

Se stai cercando di utilizzare OPENROWSET per eseguire una query distribuita ad hoc in SQL Server, ma continui a ricevere un errore di "sintassi errata" e semplicemente non riesci a vedere nulla di sbagliato nella tua sintassi, potrebbe essere che stai tentando di utilizzare una variabile per uno dei gli argomenti.

Come accennato nel titolo di questo post, OPENROWSET non accetta variabili per i suoi argomenti.

Se stai usando variabili come argomenti, prova a cambiarli in valori letterali stringa.

Esempio

Ecco un esempio da dimostrare.

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

Risultato:

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

Se controlli la documentazione Microsoft, puoi vedere che afferma esplicitamente che:

OPENROWSET non accetta variabili per i suoi argomenti.

Quindi, se cambiamo il codice sopra in modo che tutti gli argomenti siano stringhe letterali, non riceviamo più un errore.

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

Risultato:

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