Freigeben über


Übergeben einer Variablen an eine verknüpfte Serverabfrage

In diesem Artikel wird beschrieben, wie Eine Variable an eine verknüpfte Serverabfrage übergeben wird.

Originalproduktversion: SQL Server Books Online
Ursprüngliche KB-Nummer: 314520

Zusammenfassung

Wenn Sie einen verknüpften Server abfragen, führen Sie häufig eine Pass-Through-Abfrage aus, die die OPENQUERY, OPENROWSEToder OPENDATASOURCE Anweisung verwendet. Sie können die Beispiele in SQL Server-Büchern Online anzeigen, um zu sehen, wie dies mithilfe vordefinierter Transact-SQL-Zeichenfolgen zu tun ist, aber es gibt keine Beispiele dafür, wie eine Variable an diese Funktionen übergeben wird. Dieser Artikel enthält drei Beispiele zum Übergeben einer Variablen an eine verknüpfte Serverabfrage.

Um eine Variable an eine der Pass-Through-Funktionen zu übergeben, müssen Sie eine dynamische Abfrage erstellen.

Alle Daten, die Angebote enthalten, benötigen eine besondere Handhabung.

Übergeben grundlegender Werte

Wenn die grundlegende Transact-SQL-Anweisung bekannt ist, Sie aber einen oder mehrere spezifische Werte übergeben müssen, verwenden Sie Code, der dem folgenden Beispiel ähnelt:

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)

Übergeben der gesamten Abfrage

Wenn Sie die gesamte Transact-SQL-Abfrage oder den Namen des verknüpften Servers (oder beides) übergeben müssen, verwenden Sie Code, der dem folgenden Beispiel ähnelt:

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)

Verwenden der gespeicherten Sp_executesql Prozedur

Um die mehrschichtigen Anführungszeichen zu vermeiden, verwenden Sie Code, der dem folgenden Beispiel ähnelt:

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

Weitere Informationen

Weitere Informationen finden Sie in den folgenden Themen: