Ü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:
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für