Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membetulkan Ralat 'Mesti mengisytiharkan pembolehubah skalar '@RowFrom'' Apabila Menggunakan Parameter Input Global dalam Prosedur Tersimpan?

Bagaimana untuk Membetulkan Ralat 'Mesti mengisytiharkan pembolehubah skalar '@RowFrom'' Apabila Menggunakan Parameter Input Global dalam Prosedur Tersimpan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-17 00:24:25906semak imbas

How to Fix

Mengatasi Ralat Kompilasi dengan Parameter Input Global "@RowFrom" dan "@RowTo"

Dalam prosedur tersimpan, mengisytiharkan parameter input global ialah diperlukan untuk menggunakannya dalam prosedur. Walau bagaimanapun, apabila melaksanakan pertanyaan SQL yang disusun dalam prosedur tersimpan menggunakan "Exec(@sqlstatement)," ralat "Mesti mengisytiharkan pembolehubah skalar '@RowFrom'" mungkin timbul jika parameter input "@RowFrom" atau "@RowTo" adalah tidak diisytiharkan atau digunakan dengan betul.

Mesej ralat yang disediakan menunjukkan bahawa pembolehubah "@RowFrom" belum diisytiharkan. Untuk menyelesaikan masalah ini, nyatakan "@RowFrom" dan "@RowTo" secara eksplisit sebagai pembolehubah skalar di dalam prosedur tersimpan sebelum merujuknya dalam pertanyaan SQL.

Selain itu, apabila cuba memberikan nilai "@RowTo" kepada pembolehubah baharu menggunakan penggabungan, pastikan jenis pembolehubah ditukar dengan sewajarnya. Daripada sintaks yang salah

SET @Rt = ' + @RowTo

gunakan sintaks yang betul untuk menghantar "@RowTo" ke rentetan:

SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo)

Versi moden SQL Server menyokong fungsi CONCAT(), yang memudahkan operasi ini:

SET @sql = N'SELECT ' + CONVERT(varchar(12), @RowTo) + ' * 5';

Walau bagaimanapun, untuk keselamatan yang lebih baik terhadap suntikan SQL, adalah disyorkan untuk menggunakan pernyataan SQL berparameter dan bukannya penggabungan. Ini melibatkan menghantar parameter input kepada pertanyaan SQL secara eksplisit, seperti dalam contoh berikut:

SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';

EXEC sys.sp_executesql @sql,
  N'@RowFrom int, @RowTo int',
  @RowFrom, @RowTo;

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 'Mesti mengisytiharkan pembolehubah skalar '@RowFrom'' Apabila Menggunakan Parameter Input Global dalam Prosedur Tersimpan?. 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