sql >> Base de Datos >  >> RDS >> Sqlserver

OPENROWSET no acepta variables para sus argumentos (SQL Server)

Si está tratando de usar OPENROWSET para ejecutar una consulta distribuida ad hoc en SQL Server, pero sigue recibiendo un error de "sintaxis incorrecta", y simplemente no puede ver nada malo con su sintaxis, podría ser que esté tratando de usar una variable para uno de los argumentos.

Como se menciona en el título de esta publicación, OPENROWSET no acepta variables para sus argumentos.

Si está utilizando variables como argumentos, intente cambiarlas por literales de cadena.

Ejemplo

Aquí hay un ejemplo para demostrarlo.

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

Resultado:

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

Si revisa la documentación de Microsoft, puede ver que establece explícitamente que:

OPENROWSET no acepta variables para sus argumentos.

Entonces, si cambiamos el código anterior para que todos los argumentos sean literales de cadena, ya no obtendremos un error.

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

Resultado:

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