SQL Server OPENQUERY dengan Parameter: Penyelesaian
SQL Server OPENQUERY
melaksanakan pertanyaan pada pelayan terpaut, tetapi secara langsung menggunakan pembolehubah dalam hujahnya tidak disokong. Ini memerlukan penyelesaian untuk lulus parameter.
Kaedah 1: Melepasi Nilai Mudah melalui Penggabungan Rentetan
Untuk pertanyaan mudah yang memerlukan nilai khusus, SQL dinamik dengan penggabungan rentetan ialah penyelesaian yang berdaya maju:
<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: Melepasi Keseluruhan Pertanyaan sebagai Rentetan
Pendekatan ini membolehkan untuk menghantar pertanyaan lengkap atau nama pelayan yang dipautkan secara dinamik:
<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 Pengendalian Parameter Lebih Bersih
Untuk mengelakkan petikan bersarang yang rumit, gunakan 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>
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Parameter dengan OPENQUERY SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!