Passar uma variável para uma consulta de servidor vinculado

Este artigo descreve como passar uma variável para uma consulta de servidor vinculado.

Versão original do produto: SQL Server Books Online
Número original do KB: 314520

Resumo

Ao consultar um servidor vinculado, você frequentemente executa uma consulta de passagem que usa a OPENQUERYinstrução , OPENROWSETou OPENDATASOURCE . Você pode exibir os exemplos no SQL Server Books Online para ver como fazer isso usando cadeias de caracteres Transact-SQL pré-definidas, mas não há exemplos de como passar uma variável para essas funções. Este artigo fornece três exemplos de como passar uma variável para uma consulta de servidor vinculado.

Para passar uma variável para uma das funções de passagem, você deve criar uma consulta dinâmica.

Todos os dados que incluem aspas precisam de tratamento específico.

Passar valores básicos

Quando a instrução transact-SQL básica for conhecida, mas você precisar passar um ou mais valores específicos, use um código semelhante ao exemplo a seguir:

DECLARE @TSQL varchar(8000), @VAR char(2)
SELECT @VAR = 'CA'
SELECT @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + @VAR + ''''''')'
EXEC (@TSQL)

Passar a consulta inteira

Quando você precisar passar toda a consulta Transact-SQL ou o nome do servidor vinculado (ou ambos), use um código semelhante ao seguinte exemplo:

DECLARE @OPENQUERY nvarchar(4000), @TSQL nvarchar(4000), @LinkedServer nvarchar(4000)
SET @LinkedServer = 'MyLinkedServer'
SET @OPENQUERY = 'SELECT * FROM OPENQUERY('+ @LinkedServer + ','''
SET @TSQL = 'SELECT au_lname, au_id FROM pubs..authors'')'
EXEC (@OPENQUERY+@TSQL)

Usar o procedimento armazenado Sp_executesql

Para evitar as aspas em várias camadas, use um código semelhante ao exemplo a seguir:

DECLARE @VAR char(2)
SELECT @VAR = 'CA'
EXEC MyLinkedServer.master.dbo.sp_executesql
N'SELECT * FROM pubs.dbo.authors WHERE state = @state',
N'@state char(2)',
@VAR

Confira também

Para mais informações, confira os seguintes tópicos: