ホームページ >データベース >mysql チュートリアル >T-SQL ストアド プロシージャで「スカラー変数を宣言する必要があります」エラーがスローされるのはなぜですか?それを修正するにはどうすればよいですか?
スカラー変数を宣言する必要があります: エラーの解決
T-SQL を使用してストアド プロシージャ内で SQL クエリを実行する場合、一般的に次のことが行われます。 @RowFrom や @RowTo などのグローバル入力パラメーターを使用すると、「スカラー変数を宣言する必要があります」というエラーが発生します。この問題は、プロシージャが @sqlstatement 変数内のこれらのパラメーターを利用しようとしたときに発生します。
エラーについて
このエラーは、T-SQL がすべてのスカラー変数を想定しているために発生します。これには、使用前に明示的に宣言する必要がある入力パラメーターとして定義されたものも含まれます。指定されたシナリオでは、@RowFrom と @RowTo が @sqlstatement 変数内で宣言されていないため、エラーが発生します。
解決策: パラメーターの宣言
このエラーを解決するには、 @sqlstatement 変数内でスカラー変数を宣言する必要があります。これは、以下の変更されたコードに示すように、DECLARE ステートメントを使用して実現できます。
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
このコードでは、スカラー変数 @Rt を宣言し、@RowTo の値をそれに変換した後、それに割り当てます。 CONVERT 関数を使用した文字列。これにより、@Rt が適切に宣言され、@sqlstatement 変数内で使用できるようになります。
連結とパラメータ化
一方、連結は SQL 文字列の構築に使用できます。 、セキュリティ上の理由から、通常はパラメーター化を使用することをお勧めします。パラメーターを使用することで、SQL インジェクション攻撃のリスクを最小限に抑えます。以下の変更されたコードは、パラメーター化の使用方法を示しています。
SET @sql = N'SELECT @RowFrom, @RowTo;'; EXEC sys.sp_executesql @sql, N'@RowFrom int, @RowTo int', @RowFrom, @RowTo;
パラメーター化を使用することで、@RowFrom と @RowTo の値を SQL ステートメントに連結せずにストアド プロシージャに提供し、SQL ステートメントのセキュリティを確保します。私たちのコード。
以上がT-SQL ストアド プロシージャで「スカラー変数を宣言する必要があります」エラーがスローされるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。