2011-11-17 77 views
3

这是令人困惑的。对于此声明的存储过程:为什么sp_executesql在直接SP调用时不返回结果?

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' 

任何人都可以解释,为什么?

回答

3

您需要@jobGuid添加作为参数,当你调用SP。没有它,参数将具有默认值NULL

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

你有喜!谢谢!问题是我在跟踪C#代码后从Perf Profiler中获取它。并且该参数不存在的原因是因为我没有指定'CommandType'为'StoredProcedure'。所以它默认为“文本”,因此直接按照规定使用它。男人!浪费了一小时这样一件小事。再次感谢。 – Schultz9999

相关问题