SQL Server OPENQUERY mit Parametern: Problemumgehungen
SQL Server OPENQUERY
führt Abfragen auf Verbindungsservern aus, die direkte Verwendung von Variablen in seinen Argumenten wird jedoch nicht unterstützt. Dies erfordert Workarounds für die Parameterübergabe.
Methode 1: Übergabe einfacher Werte per String-Verkettung
Für einfache Abfragen, die bestimmte Werte benötigen, ist dynamisches SQL mit String-Verkettung eine praktikable 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>
Methode 2: Übergeben der gesamten Abfrage als String
Dieser Ansatz ermöglicht die dynamische Übergabe der vollständigen Abfrage oder sogar des Verbindungsservernamens:
<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 für eine sauberere Parameterbehandlung
Um komplexe verschachtelte Anführungszeichen zu vermeiden, verwenden Sie sp_executesql
:
<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; ``` This method offers improved readability and reduces the risk of SQL injection vulnerabilities compared to string concatenation. Note that you're executing `sp_executesql` on the linked server itself. Choose the method that best suits your query complexity and preference for code clarity. Remember to prioritize security and avoid SQL injection vulnerabilities when using dynamic SQL.</code>
Das obige ist der detaillierte Inhalt vonWie kann ich Parameter mit OPENQUERY von SQL Server verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!