Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

OPENROWSET não aceita variáveis ​​para seus argumentos (SQL Server)


Se você estiver tentando usar OPENROWSET para executar uma consulta distribuída ad hoc no SQL Server, mas você continua recebendo um erro de “sintaxe incorreta” e não consegue ver nada de errado com sua sintaxe, pode ser que você esteja tentando usar uma variável para um dos os argumentos.

Conforme mencionado no título deste post, OPENROWSET não aceita variáveis ​​para seus argumentos.

Se você estiver usando variáveis ​​como argumentos, tente alterá-las para literais de string.

Exemplo


Aqui está um exemplo para demonstrar.
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'.

Se você verificar a documentação da Microsoft, verá que ela afirma explicitamente que:

OPENROWSET não aceita variáveis ​​para seus argumentos.

Portanto, se alterarmos o código acima para que todos os argumentos sejam literais de string, não receberemos mais um erro.
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        |
+---------+-------------+