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