ホームページ >データベース >mysql チュートリアル >sp_executesql を使用して動的 T-SQL で UNIQUEIDENTIFIER パラメーターを正しく渡す方法

sp_executesql を使用して動的 T-SQL で UNIQUEIDENTIFIER パラメーターを正しく渡す方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-03 12:47:39530ブラウズ

How to Correctly Pass UNIQUEIDENTIFIER Parameters in Dynamic T-SQL using sp_executesql?

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

動的 T-SQL では、sp_executesql を使用して実行されるクエリにパラメーターを渡すことが困難になる場合があります。この記事では、UNIQUEIDENTIFIER パラメータを必要とする WHERE 句を含む動的 SQL を使用するときに直面する一般的な問題について説明します。

sp_executesql ステートメントに必要なパラメータ バインディングが欠落している次の例を考えてみましょう。

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

Whenこのプロシージャが実行されると、@p_CreatedBy パラメータが動的 SQL にバインドされていないため、WHERE 句の条件は失敗します。 query.

この問題を解決するには、パラメータを sp_executesql に明示的に渡す必要があります。 MSDN によると、正しい構文は次のとおりです。

EXECUTE sp_executesql @sql, N'@p UNIQUEIDENTIFIER', @p = @p_CreatedBY

これにより、@p_CreatedBy パラメータが動的 SQL ステートメントの @p パラメータに割り当てられ、WHERE 句で条件を正しく評価できるようになります。

以上がsp_executesql を使用して動的 T-SQL で UNIQUEIDENTIFIER パラメーターを正しく渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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