ホームページ > データベース > mysql チュートリアル > T-SQL 動的 SQL ステートメントでパラメーターを正しく渡すにはどうすればよいですか?

T-SQL 動的 SQL ステートメントでパラメーターを正しく渡すにはどうすればよいですか?

DDD
リリース: 2025-01-05 03:02:39
オリジナル
785 人が閲覧しました

How to Correctly Pass Parameters in T-SQL Dynamic SQL Statements?

T-SQL を使用した動的 SQL ステートメントでのパラメーターの受け渡し

T-SQL では、動的 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
ログイン後にコピー

このプロシージャを WHERE 句なしで実行すると、正常に動作します。ただし、UNIQUEIDENTIFIER パラメータを含む WHERE 句が追加された場合、結果は返されません。この問題は、動的 SQL ステートメントでのパラメーターの誤った使用にあります。

この問題を解決するには、パラメーターを sp_executesql ステートメントに渡す必要があります。 MSDN によると:

...
 WHERE 
    CreatedBy = @p
...

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

この変更されたコードでは、パラメーター @p が WHERE 句で使用され、@p パラメーターが @p_CreatedBY の値に設定されて sp_executesql ステートメントが呼び出されます。これにより、UNIQUEIDENTIFIER パラメータが動的 SQL ステートメントに正しく渡されるようになります。

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

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