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

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

Mary-Kate Olsen
發布: 2024-12-17 00:24:25
原創
904 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板