2011-08-23 109 views
5

我觉得自己像一个白痴,但我不能让这个SP默认值....这是我如何声明我的参数。除了我不能得到notReady默认为@cacheStatusSQL Server 2008存储过程中的默认参数值

ALTER PROCEDURE [dbo].[PCS_DocumentCacheInsert] 
(
    @sessionId varchar(200), 
    @mrn varchar(50) , 
    @fromDate datetime, 
    @toDate datetime, 
    @aggregate varchar(50), 
    @author varchar(50), 
    @datePerformed dateTime, 
    @docId varchar(15), 
    @encounterId varchar(15), 
    @facility varchar(5), 
    @level char(1), 
    @orderedByAuthor varchar(50), 
    @resultAuthor varchar(50), 
    @resultCode varchar(5), 
    @resultId varchar(30), 
    @resultName varchar(30), 
    @status varchar(5), 
    @subType varchar(10), 
    @type varchar(10), 
    @security varchar(3), 
    @serviceGroup varchar(15), 
    @witmurNum varchar(10), 
    @deptId varchar(10), 
    @deptText varchar(40), 
    @cacheCreateTS dateTime , 
    @cacheStatus varchar(8) ='notReady', 
    @cacheUpdateTS datetime 
) 

一切正常,这个PROC。 Google说我正在使用正确的语法。

这里是我的MS怎么称呼

EXEC @return_value = [dbo].[PCS_DocumentCacheInsert] 
    @sessionId = N'asdfssa', 
    @mrn = N'asdf', 
    @fromDate = NULL, 
    @toDate = NULL, 
    @aggregate = NULL, 
    @author = N'author', 
    @datePerformed = NULL, 
    @docId = N'id', 
    @encounterId = NULL, 
    @facility = NULL, 
    @level = NULL, 
    @orderedByAuthor = NULL, 
    @resultAuthor = NULL, 
    @resultCode = NULL, 
    @resultId = NULL, 
    @resultName = NULL, 
    @status = NULL, 
    @subType = NULL, 
    @type = NULL, 
    @security = NULL, 
    @serviceGroup = NULL, 
    @witmurNum = NULL, 
    @deptId = NULL, 
    @deptText = NULL, 
    @cacheCreateTS = NULL, 
    @cacheStatus = NULL, 
    @cacheUpdateTS = NULL 

选择 '返回值'= @return_value

GO

所以我说这和它现在的工作,但我不明白为什么当我点击右键并说执行存储过程,然后选择空复选框,为什么它不会默认。我想检查空发送'NULL'到proc而不是DBNull?

if @cacheStatus is null 
begin 
    set @cacheStatus ='notReady' 
end 
+0

任何机会,你可以提供的SP是如何被调用的样本? – Justin

+0

你的语法看起来不错。检查你传递给@cachStatus的值。 (即,确保你没有通过)。 – Chains

+0

我从实体框架(从WCF服务)和管理工作室调用它同样的行为这两个地方都没有默认值 – cobolstinks

回答

17

您确定您没有发送空值作为该参数的值吗?只有在根本没有发送该参数时才使用默认值。

@JNK提出这样的解决办法,如果你有这样的问题:

IF @Cachestatus IS NULL SET @cachestatus = 'NotReady' 
+4

+1 - 解决方法是添加IF @Cachestatus IS NULL SET @cachestatus ='NotReady'' – JNK

+0

@JNk补充说,作为一个单独的答案,如果这确实是他的问题,那么它应该被接受。 – HLGEM

+0

@HL - 如果没有你指出传递'NULL'那么我就不会这么做了。为你的答案添加一行。 – JNK

3

这样称呼它:

EXEC @return_value = [dbo].[PCS_DocumentCacheInsert] 
    @sessionId = N'asdfssa', 
    @mrn = N'asdf', 
    @fromDate = NULL, 
    @toDate = NULL, 
    @aggregate = NULL, 
    @author = N'author', 
    @datePerformed = NULL, 
    @docId = N'id', 
    @encounterId = NULL, 
    @facility = NULL, 
    @level = NULL, 
    @orderedByAuthor = NULL, 
    @resultAuthor = NULL, 
    @resultCode = NULL, 
    @resultId = NULL, 
    @resultName = NULL, 
    @status = NULL, 
    @subType = NULL, 
    @type = NULL, 
    @security = NULL, 
    @serviceGroup = NULL, 
    @witmurNum = NULL, 
    @deptId = NULL, 
    @deptText = NULL, 
    @cacheCreateTS = NULL, 
    [email protected] = NULL, 
    @cacheUpdateTS = NULL 

,如果你想获得使用默认的你不可错过@cacheStatus

2

另一个尚未提及的选项是使用关键字“DEFAULT”而不是传递NULL值。

所以调用SP时,代码如下:

EXEC @return_value = [dbo].[PCS_DocumentCacheInsert] 
    @sessionId = N'asdfssa', 
    @mrn = N'asdf', 
    @fromDate = NULL, 
    ... Just got rid of some lines to focus on the param in question - see DEFAULT below 
    @cacheCreateTS = NULL, 
    @cacheStatus = DEFAULT, 
    @cacheUpdateTS = NULL