首頁 >資料庫 >mysql教程 >如何修復在預存程序中使用全域輸入參數時出現「必須宣告標量變數'@RowFrom'」錯誤?

如何修復在預存程序中使用全域輸入參數時出現「必須宣告標量變數'@RowFrom'」錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-17 00:24:25910瀏覽

How to Fix

解決「@RowFrom」和「@RowTo」全域輸入參數的編譯錯誤

在儲存過程中,宣告全域參數是在程序中使用它們是必要的。但是,當使用“Exec(@sqlstatement)”在預存程序中執行已編譯的SQL 查詢時,如果“@RowFrom”或“@RowTo”輸入參數為“必須聲明標量變數'@RowFrom'”,則可能會出現錯誤未正確聲明或使用。

提供的錯誤訊息表明「@RowFrom」變數尚未聲明。若要解決此問題,請在 SQL 查詢中引用「@RowFrom」和「@RowTo」之前,在預存程序中明確宣告「@RowFrom」和「@RowTo」標量變數。

此外,當嘗試將「@RowTo」的值指派給使用串聯的新變量,請確保變數類型已正確轉換。不要使用錯誤的語法

SET @Rt = ' + @RowTo

使用正確的語法將「@RowTo」轉換為字串:

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

現代版本的SQL Server 支援CONCAT() 函數,該函數簡化了這些操作:

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

但是,為了更好地防止SQL 注入,建議使用參數化SQL語句的串聯。這涉及將輸入參數明確傳遞給 SQL 查詢,如下例所示:

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

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

以上是如何修復在預存程序中使用全域輸入參數時出現「必須宣告標量變數'@RowFrom'」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn