Heim >Datenbank >MySQL-Tutorial >Wie kann ich Parameter mit OPENQUERY in SQL Server verwenden?

Wie kann ich Parameter mit OPENQUERY in SQL Server verwenden?

Susan Sarandon
Susan SarandonOriginal
2025-01-14 12:41:44960Durchsuche

How Can I Use Parameters with OPENQUERY in SQL Server?

Parameter in OPENQUERY verwenden

OPENQUERY ist ein leistungsstarkes Tool für den Zugriff auf Verbindungsserverdaten, aber die Einbindung von Parametern in Abfragen kann eine Herausforderung sein. In der Dokumentation heißt es eindeutig, dass OPENQUERY keine Variablen für seine Parameter akzeptiert.

Lösung:

Um diese Einschränkung zu überwinden, stehen mehrere Problemumgehungen zur Verfügung:

  • Übergeben Sie einen Grundwert: Für einfache Fälle, in denen Sie einen bestimmten Wert übergeben müssen, verwenden Sie Code wie diesen:
<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>
  • Übergeben Sie die gesamte Abfrage: Wenn Sie die vollständige Abfrage oder den Namen des Verbindungsservers übergeben müssen, verwenden Sie Code ähnlich dem folgenden:
<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>
  • Verwenden Sie die gespeicherte Prozedur Sp_executesql: Um den Code zu vereinfachen und mehrere Anführungszeichenebenen zu vermeiden, verwenden Sie die folgende Methode:
<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>

Das obige ist der detaillierte Inhalt vonWie kann ich Parameter mit OPENQUERY in SQL Server verwenden?. 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