首页 > 数据库 > mysql教程 > 如何使用 sp_executesql 在动态 T-SQL 中正确传递 UNIQUEIDENTIFIER 参数?

如何使用 sp_executesql 在动态 T-SQL 中正确传递 UNIQUEIDENTIFIER 参数?

Patricia Arquette
发布: 2025-01-03 12:47:39
原创
512 人浏览过

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
登录后复制

何时执行此过程时,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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板