Parameterübergabe in OPENQUERY: Eine Problemumgehung
Der OPENQUERY
-Befehl von SQL Server erleichtert die Abfrage verknüpfter Server. Die direkte Übergabe von Variablen als Parameter wird jedoch nicht unterstützt. In diesem Artikel werden effektive Problemumgehungen beschrieben.
Methoden für parametrisierte Abfragen
Trotz der Einschränkungen von OPENQUERY
:
1. Grundwerte fest kodieren:
Für Abfragen mit bekannten Strukturen, die jedoch bestimmte Werte erfordern, bietet dynamisches SQL eine Lösung:
<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>
2. Übergeben der gesamten Abfrage:
Dieser Ansatz ist ideal für Szenarien, in denen die gesamte T-SQL-Abfrage oder der Name des Verbindungsservers (oder beides) dynamisch bestimmt werden muss:
<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>
3. Nutzung sp_executesql
:
Um komplexe Zitate zu vereinfachen, bietet die sp_executesql
gespeicherte Prozedur eine sauberere Alternative:
<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>
Durch den Einsatz dieser Techniken können Entwickler parametrisierte Abfragen erfolgreich in OPENQUERY
integrieren und so die inhärenten Einschränkungen überwinden. Wählen Sie die Methode, die Ihren spezifischen Anforderungen und der Komplexität Ihrer Abfrage am besten entspricht.
Das obige ist der detaillierte Inhalt vonWie kann ich Parameter an OPENQUERY in SQL Server übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!