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!