De maneira geral, isto é possível construindo queries dinâmicas e fazendo um tratamento especial para dados que incluem aspas.
Abaixo seguem alguns exemplos:
1) Passando valores específicos para uma variável
DECLARE @TSQL nvarchar(4000), @VAR char(2)
SELECT @VAR = ‘CA’
SELECT @TSQL = ‘SELECT * FROM OPENQUERY([Linked_Server],”SELECT * FROM pubs.dbo.authors WHERE state = ””’ + @VAR + ”””’)’
EXEC sp_executesql @TSQL
Obs: Linked_Server é o nome do seu links server com o servidor remoto.
2) Utilizando variáveis de retorno:
DECLARE @TSQL nvarchar(4000), @VAR varchar(11), @au_lname varchar(40)
SELECT @VAR = ‘172-32-1176’
SELECT @TSQL = ‘SELECT @au_lname=au_lname FROM OPENQUERY([Linked_Server],”SELECT * FROM pubs.dbo.authors WHERE au_id = ””’ + @VAR + ”””’)’
exec sp_executesql @TSQL, N’@au_lname nvarchar(40) OUTPUT’, @au_lname OUTPUT
3) Passando uma query completa, o nome do Linked Server ou ambos para uma variável:
DECLARE @OPENQUERY nvarchar(4000), @TSQL nvarchar(4000), @LinkedServer nvarchar(4000)
SET @LinkedServer = ‘[Linked_Server]’
SET @OPENQUERY = ‘SELECT * FROM OPENQUERY(‘+ @LinkedServer + ‘,”’
SET @TSQL = ‘SELECT au_lname, au_id FROM pubs..authors”)’
SET @TSQL = @OPENQUERY+@TSQL
EXEC sp_executesql @TSQL
Desta forma podemos maximizar a utilização da função OPENQUERY e também das funções OPENROWSET e OPENDATASOURCE que também se aplicam aos exemplos citados acima.
Qualquer dúvida sobre Linked Server, OPENQUERY e OPENROWSET, consulte o Books Online do SQL Server