Melalukan Parameter ke OPENQUERY dalam SQL Server
PenyataanSQL Server OPENQUERY
melaksanakan pertanyaan pada pelayan terpaut. Walau bagaimanapun, membenamkan parameter secara langsung dalam pernyataan OPENQUERY
tidak disokong. Dokumentasi Microsoft dengan jelas menyatakan bahawa OPENQUERY
tidak menerima pembolehubah sebagai hujah. Mari terokai penyelesaian yang berkesan:
Kaedah 1: Nilai Pengekodan Keras (untuk bilangan parameter yang terhad)
Pendekatan ini sesuai apabila anda perlu lulus hanya beberapa nilai tertentu. Penggabungan rentetan digunakan untuk membina pertanyaan:
<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>
Kaedah 2: Pembinaan Pertanyaan Dinamik (untuk pertanyaan yang lebih kompleks atau nama pelayan terpaut dinamik)
Untuk pertanyaan atau senario yang lebih rumit di mana nama pelayan yang dipautkan berubah-ubah, SQL dinamik menawarkan penyelesaian:
<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>
Kaedah 3: Menggunakan sp_executesql
(untuk meminimumkan isu petikan)
Untuk mengelakkan penyambungan rentetan yang kompleks dan kemungkinan masalah petikan, sp_executesql
menyediakan penyelesaian yang lebih bersih:
<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>
Kaedah ini menawarkan cara praktikal untuk memasukkan parameter ke dalam pernyataan OPENQUERY
anda, membolehkan interaksi yang cekap dengan pelayan terpaut. Pilih kaedah yang paling sesuai dengan keperluan dan kerumitan khusus anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melewati Parameter kepada OPENQUERY dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!