为什么使用sp_executesql不返回结果而直接调用存储过程却能返回结果?

3
这很令人困惑。针对这个存储过程的声明:
CREATE PROCEDURE dbo.JobGet
    @jobGuid uniqueidentifier = NULL, 

这行代码返回结果:

exec dbo.JobGet @jobGuid ='BDEA1E43-9EC7-42B0-A386-903FE1749FF7'

而这个则不行:

exec sp_executesql N'dbo.JobGet',N'@jobGuid uniqueidentifier',@jobGuid='BDEA1E43-9EC7-42B0-A386-903FE1749FF7'

有人能解释一下为什么吗?

1个回答

3
当您调用SP时,需要将@jobGuid作为参数添加。如果没有它,该参数将具有默认值NULL
exec sp_executesql N'dbo.JobGet @jobGuid',
                   N'@jobGuid uniqueidentifier',
                   @jobGuid='BDEA1E43-9EC7-42B0-A386-903FE1749FF7'

当然!谢谢!问题是我从 Perf Profiler 中跟踪 C# 代码时获取了它。而且之所以那个参数不存在,是因为我没有指定 CommandTypeStoredProcedure。所以它默认为 Text,因此直接使用提供的内容。天啊!浪费了一个小时在这么小的事情上。再次感谢。 - Schultz9999

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接