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 サイトの他の関連記事を参照してください。