Heim >Datenbank >MySQL-Tutorial >Wie kann ich Parameter an eine OPENQUERY in SQL Server übergeben?

Wie kann ich Parameter an eine OPENQUERY in SQL Server übergeben?

Linda Hamilton
Linda HamiltonOriginal
2025-01-14 12:27:42358Durchsuche

How Can I Pass Parameters to an OPENQUERY in SQL Server?

Ü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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn