Compartilhar via


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: Manuais Online do SQL Server
Número original do KB: 314520

Resumo

Ao consultar um servidor vinculado, você frequentemente executa uma consulta de passagem que usa a OPENQUERYinstrução , OPENROWSET, or OPENDATASOURCE . Você pode exibir os exemplos nos Manuais Online do SQL Server para ver como fazer isso usando cadeias de caracteres Transact-SQL predefinidas, 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.

Quaisquer dados que incluam cotações precisam de tratamento especial.

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)

Passe toda a consulta

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

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 de 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, consulte os seguintes tópicos: