Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggunakan Parameter dengan OPENQUERY dalam SQL Server?

Bagaimanakah Saya Boleh Menggunakan Parameter dengan OPENQUERY dalam SQL Server?

Susan Sarandon
Susan Sarandonasal
2025-01-14 12:41:44956semak imbas

How Can I Use Parameters with OPENQUERY in SQL Server?

Menggunakan parameter dalam OPENQUERY

OPENQUERY ialah alat yang berkuasa untuk mengakses data pelayan terpaut, tetapi memasukkan parameter ke dalam pertanyaan boleh menjadi mencabar. Dokumentasi dengan jelas menyatakan bahawa OPENQUERY tidak menerima pembolehubah untuk parameternya.

Penyelesaian:

Untuk mengatasi had ini, beberapa penyelesaian tersedia:

  • Lulus nilai asas: Untuk kes mudah di mana anda perlu menghantar nilai tertentu, gunakan kod seperti ini:
<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>
  • Lulus keseluruhan pertanyaan: Apabila anda perlu menghantar pertanyaan lengkap atau nama pelayan terpaut, gunakan kod yang serupa dengan yang berikut:
<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>
  • Gunakan prosedur tersimpan Sp_executesql: Untuk memudahkan kod dan mengelakkan berbilang lapisan petikan, gunakan kaedah berikut:
<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>

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Parameter dengan OPENQUERY dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn