Help and Support

Artigo: 314520 - Última revisão: quinta-feira, 22 de Dezembro de 2005 - Revisão: 4.4

A passar uma variável para uma consulta de servidor ligado

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Este artigo descreve como transferir uma variável para uma consulta de servidor ligado.

Quando consulta um servidor ligado, é frequentemente a efectuar uma consulta pass-through que utiliza a instrução OPENQUERY, OPENROWSET ou OPENDATASOURCE. Pode ver os exemplos no SQL Server Books Online para saber como fazê-lo utilizando cadeias de Transact-SQL predefinidas, mas não não exemplos sobre como transferir uma variável para estas funções. Este artigo fornece três exemplos sobre como transferir uma variável para uma consulta de servidor ligado.

Para passar uma variável para uma das funções de pass-through, terá de criar uma consulta dinâmica.

Os dados que inclua aspas têm tratamento específico. Para obter mais informações, consulte o tópico "utilizar o carácter e varchar dados" no SQL Server Books Online e consulte o seguinte artigo na Microsoft Knowledge Base:
156501  (http://support.microsoft.com/kb/156501/EN-US/ ) INF: QUOTED_IDENTIFIER e cadeias com marcas de aspas simples

Passar valores base

Quando a instrução Transact-SQL básica é conhecida, mas tem de passar um ou mais valores específicos, utiliza código semelhante o seguinte exemplo:
      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 tem de passar a consulta de Transact-SQL completa ou o nome do servidor ligado (ou ambos), código de utilização que é 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) 
				

Utilizar o Sp_executesql procedimento armazenado

Para evitar as aspas multi-layered, utilize o código que é semelhante ao seguinte exemplo:
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
				

Referências

Para obter informações adicionais, consulte os tópicos seguintes no SQL Server Books Online:
"OPENROWSET"
"OPENQUERY"
"OPENDATASOURCE"
"Using sp_executesql"
"sp_executesql"

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL 2005 Server Workgroup
Palavras-chave: 
kbmt kbhowtomaster KB314520 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Pedíamos-lhe o favor de preencher o formulário existente no fundo desta página caso venha a encontrar erros neste artigo e tenha possibilidade de colaborar no processo de aperfeiçoamento desta ferramenta. Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 314520  (http://support.microsoft.com/kb/314520/en-us/ )

Traduções de Artigos