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 | +---------+-------------+