Übergeben einer Variablen an eine Verbindungsserverabfrage

In diesem Artikel wird beschrieben, wie Sie eine Variable an eine Verbindungsserverabfrage übergeben.

Ursprüngliche Produktversion: SQL Server-Onlinedokumentation
Ursprüngliche KB-Nummer: 314520

Zusammenfassung

Wenn Sie einen Verbindungsserver abfragen, führen Sie häufig eine Passthrough-Abfrage aus, die die OPENQUERY-, OPENROWSET- oder OPENDATASOURCE -Anweisung verwendet. Sie können die Beispiele in SQL Server-Onlinedokumentation anzeigen, um zu sehen, wie dies mithilfe vordefinierter Transact-SQL-Zeichenfolgen funktioniert, aber es gibt keine Beispiele dafür, wie eine Variable an diese Funktionen übergeben wird. Dieser Artikel enthält drei Beispiele für das Übergeben einer Variablen an eine Verbindungsserverabfrage.

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

Alle Daten, die Anführungszeichen enthalten, müssen besonders behandelt werden.

Übergeben von Basiswerten

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 Verbindungsservers (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 Sp_executesql gespeicherten Prozedur

Um mehrschichtige 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

Siehe auch

Weitere Informationen finden Sie in den folgenden Themen: