ホームページ > データベース > mysql チュートリアル > T-SQL の動的 SQL でパススルー クエリを適切にパラメータ化するにはどうすればよいですか?

T-SQL の動的 SQL でパススルー クエリを適切にパラメータ化するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-03 07:01:45
オリジナル
190 人が閲覧しました

How to Properly Parameterize Pass-Through Queries in T-SQL's Dynamic SQL?

T-SQL の動的 SQL: パラメーター化されたパススルー

T-SQL では、動的 SQL はクエリを構築するための便利なツールになります。実行時。ただし、動的 ​​SQL ステートメント内でパラメーターを処理する方法を理解することが重要です。

次の動的クエリを考えてみましょう。

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
ログイン後にコピー

このクエリは、 @p_CreatedBy パラメーター。ただし、パラメーターを指定してこのクエリを実行すると、結果は返されません。

この問題を解決するには、次のコードに示すように、パラメーターを sp_executesql に渡すことが重要です。

...
WHERE 
    CreatedBy = @p
...

EXECUTE sp_executesql @sql, N'@p UNIQUEIDENTIFIER', @p = @p_CreatedBY
ログイン後にコピー

この更新されたコードでは、@p パラメーターは UNIQUEIDENTIFIER タイプとして定義され、その値は @p_CreatedBY パラメーターに設定されます。これにより、パラメータが動的 SQL ステートメントに適切に渡されることが保証されます。

この手法に従うことで、T-SQL の動的 SQL クエリ内でパラメータを効果的に使用できます。

以上がT-SQL の動的 SQL でパススルー クエリを適切にパラメータ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート