ホームページ >データベース >mysql チュートリアル >T-SQL ストアド プロシージャで「スカラー変数を宣言する必要があります」エラーがスローされるのはなぜですか?それを修正するにはどうすればよいですか?

T-SQL ストアド プロシージャで「スカラー変数を宣言する必要があります」エラーがスローされるのはなぜですか?それを修正するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-24 04:13:23401ブラウズ

Why Does My T-SQL Stored Procedure Throw a

スカラー変数を宣言する必要があります: エラーの解決

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。