Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membetulkan Ralat 'Sintaks yang salah berhampiran ' '' dalam Pertanyaan OPENROWSET dengan Pembolehubah?

Bagaimana untuk Membetulkan Ralat 'Sintaks yang salah berhampiran ' '' dalam Pertanyaan OPENROWSET dengan Pembolehubah?

Susan Sarandon
Susan Sarandonasal
2025-01-03 22:53:41956semak imbas

How to Fix

Menyelesaikan Masalah OPENROWSET Pertanyaan dengan Pembolehubah

Apabila menggunakan fungsi OPENROWSET untuk mengakses data luaran, anda mungkin menghadapi ralat jika anda memasukkan ungkapan pembolehubah dalam rentetan pertanyaan. Satu contoh sedemikian ialah ralat "Sintaks salah berhampiran ' '." Ini berlaku apabila anda cuba menggabungkan pembolehubah dengan pernyataan OPENROWSET, seperti yang dilihat dalam pertanyaan berikut:

SELECT * 
FROM OPENROWSET(
    'SQLNCLI',
    'DRIVER={SQL Server};',
    'EXEC dbo.sProc1 @ID = ' + @id 
 )

Dalam pertanyaan ini, pembolehubah @id sedang dilampirkan pada pernyataan EXEC menggunakan operator ' ' . Walau bagaimanapun, OPENROWSET tidak menyokong penggunaan ungkapan dalam rentetan pertanyaannya.

Penyelesaian:

Untuk menyelesaikan isu ini, anda tidak boleh terus menggunakan pembolehubah dalam pertanyaan OPENROWSET. Sebaliknya, anda boleh membuat SQL dinamik untuk lulus parameter. Berikut ialah contoh:

Declare @ID int
Declare @sql nvarchar(max)
Set @ID=1
Set @sql='SELECT * 
FROM OPENROWSET(
               ''SQLNCLI'',
               ''DRIVER={SQL Server};'',
               ''EXEC dbo.usp_SO @ID =' + convert(varchar(10),@ID) + ''')'

-- Print @sql
 Exec(@sql)

Dalam penyelesaian ini, kami mentakrifkan pembolehubah @sql untuk memegang pertanyaan SQL dinamik dan menggabungkan pembolehubah @ID menggunakan fungsi CONVERT(). Ini membolehkan kami melaksanakan pernyataan SQL dinamik dengan parameter yang dikehendaki.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 'Sintaks yang salah berhampiran ' '' dalam Pertanyaan OPENROWSET dengan Pembolehubah?. 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