使用 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
何时执行此过程时,WHERE 子句条件将失败,因为 @p_CreatedBy 参数未绑定到动态 SQL
要解决此问题,必须将参数显式传递给 sp_executesql。根据MSDN,正确的语法是:
EXECUTE sp_executesql @sql, N'@p UNIQUEIDENTIFIER', @p = @p_CreatedBY
这可以确保@p_CreatedBy参数被分配给动态SQL语句中的@p参数,使WHERE子句能够正确评估条件。
以上是如何使用 sp_executesql 在动态 T-SQL 中正确传递 UNIQUEIDENTIFIER 参数?的详细内容。更多信息请关注PHP中文网其他相关文章!