Passare una variabile a una query server collegata

Questo articolo descrive come passare una variabile a una query server collegata.

Versione originale del prodotto: SQL Server Books Online
Numero KB originale: 314520

Riepilogo

Quando si esegue una query su un server collegato, si esegue spesso una query pass-through che usa l'istruzione OPENQUERY, OPENROWSETo OPENDATASOURCE . È possibile visualizzare gli esempi nella documentazione online di SQL Server per vedere come eseguire questa operazione usando stringhe Transact-SQL predefinite, ma non sono disponibili esempi di come passare una variabile a queste funzioni. Questo articolo fornisce tre esempi di come passare una variabile a una query server collegata.

Per passare una variabile a una delle funzioni pass-through, è necessario compilare una query dinamica.

Tutti i dati che includono virgolette richiedono una particolare gestione.

Passare i valori di base

Quando l'istruzione Transact-SQL di base è nota, ma è necessario passare uno o più valori specifici, usare codice simile all'esempio seguente:

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)

Passare l'intera query

Quando è necessario passare l'intera query Transact-SQL o il nome del server collegato (o entrambi), usare codice simile all'esempio seguente:

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)

Usare la stored procedure Sp_executesql

Per evitare le virgolette a più livelli, usare codice simile all'esempio seguente:

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

Vedere anche

Per ulteriori informazioni, vedere i seguenti argomenti: