Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 OPENQUERY
instruçã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: