Übergabe von Parametern an OPENQUERY in SQL Server
Die OPENQUERY
-Anweisung von SQL Server führt Abfragen auf Verbindungsservern aus. Das direkte Einbetten von Parametern in die OPENQUERY
-Anweisung wird jedoch nicht unterstützt. In der Dokumentation von Microsoft heißt es eindeutig, dass OPENQUERY
keine Variablen als Argumente akzeptiert. Lassen Sie uns effektive Problemumgehungen erkunden:
Methode 1: Werte fest codieren (für eine begrenzte Anzahl von Parametern)
Dieser Ansatz eignet sich, wenn Sie nur wenige spezifische Werte übergeben müssen. Zum Erstellen der Abfrage wird die Zeichenfolgenverkettung verwendet:
<code class="language-sql">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);</code>
Methode 2: Dynamische Abfragekonstruktion (für komplexere Abfragen oder dynamische Verbindungsservernamen)
Für komplexere Abfragen oder Szenarien, in denen der Name des Verbindungsservers variabel ist, bietet dynamisches SQL eine Lösung:
<code class="language-sql">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);</code>
Methode 3: Verwendung von sp_executesql
(um Zitierprobleme zu minimieren)
Um komplexe Zeichenfolgenverkettungen und potenzielle Anführungszeichenprobleme zu vermeiden, bietet sp_executesql
eine sauberere Lösung:
<code class="language-sql">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;</code>
Diese Methoden bieten praktische Möglichkeiten, Parameter in Ihre OPENQUERY
-Anweisungen zu integrieren und so eine effiziente Interaktion mit Verbindungsservern zu ermöglichen. Wählen Sie die Methode, die Ihren spezifischen Bedürfnissen und Ihrer Komplexität am besten entspricht.
Das obige ist der detaillierte Inhalt vonWie kann ich Parameter an eine OPENQUERY in SQL Server übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!