ホームページ >データベース >mysql チュートリアル >T-SQL で動的 SQL クエリを安全にパラメータ化する方法
T-SQL での動的 SQL クエリのパラメータ化
動的 SQL クエリでは、SQL インジェクション攻撃を防止し、型の安全性を確保するためにパラメータが重要です。 T-SQL 動的 SQL でパラメーターを操作する場合、それらを sp_executesql ストアド プロシージャに正しく渡すことが重要です。
問題:
次の動的クエリを想定します。 WHERE 句の UNIQUEIDENTIFIER パラメータ:
CREATE PROCEDURE [dbo].[sp_Test1] /* 'b0da56dc-fc73-4c0e-85f7-541e3e8f249d' */ ( @p_CreatedBy UNIQUEIDENTIFIER ) AS DECLARE @sql NVARCHAR(4000) SET @sql =' DECLARE @p_CreatedBY UNIQUEIDENTIFIER SELECT DateTime, Subject, CreatedBy FROM ( SELECT DateTime, Subject, CreatedBy, ROW_NUMBER() OVER(ORDER BY DateTime ) AS Indexing FROM ComposeMail WHERE CreatedBy = @p_CreatedBy /* <--- the problem is in this condition */ ) AS NewDataTable ' EXEC sp_executesql @sql
このクエリがパラメータを渡さずに実行すると、結果は返されません。
解決策:
この問題を解決するには、パラメータを sp_executesql に渡す必要があります。 WHERE 句を次のように変更します:
WHERE CreatedBy = @p
そして @p パラメータ名を使用してパラメータを渡します:
EXECUTE sp_executesql @sql, N'@p UNIQUEIDENTIFIER', @p = @p_CreatedBY
これにより、WHERE 句の条件で呼び出し元からのパラメータ化された値が使用されるようになります。 、SQL インジェクションを防止し、型の安全性を確保します。
以上がT-SQL で動的 SQL クエリを安全にパラメータ化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。