グローバル入力パラメータと SQL 実行に関するトラブル
T-SQL で SQL クエリをコンパイルし、EXEC を使用して実行するストアド プロシージャ内(@sqlstatement) を実行すると、「スカラー変数 "@RowFrom" を宣言する必要があります。」というエラーが発生する場合があります。 @sqlstatement 変数内でグローバル入力パラメーター @RowFrom および @RowTo を使用しようとすると。
問題の理解
パラメーター @RowFrom および @RowTo が原因でエラーが発生します。 @sqlstatement 文字列内では認識されません。これは、SQL 文字列は明示的な宣言がなければグローバル変数に直接アクセスできないためです。
解決策: Int を String に変換するか、適切なパラメータ化を使用する
この問題を解決するには 2 つのアプローチがあります。 :
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;'; EXEC sys.sp_executesql @sql, N'@RowFrom int, @RowTo int', @RowFrom, @RowTo;
最新バージョンに関する考慮事項
最新バージョンの SQL では、文字列連結に CONCAT 関数を使用できます。
SET @sql = CONCAT(N'SELECT ', @RowTo, ' * 5');
ただし、SQL インジェクションを防ぐために適切なパラメータ化を使用することをお勧めします。脆弱性。
以上が動的 SQL の実行時に T-SQL ストアド プロシージャでグローバル入力パラメータを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。