【发布时间】:2011-11-02 00:40:43
【问题描述】:
我觉得自己像个白痴,但我不能让这个 SP 成为默认值......这是我声明我的参数的方式。
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
)
除了我无法将notReady 设置为@cacheStatus 的默认值外,此过程一切正常。谷歌说我使用了正确的语法。
这是我在 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
SELECT '返回值' = @return_value
去
所以我添加了这个并且它现在可以工作,但我不明白为什么当我右键单击并说执行存储过程然后选择空复选框为什么它不会默认。我猜检查 null 会将“NULL”发送到 proc 而不是 DBNull?
if @cacheStatus is null
begin
set @cacheStatus ='notReady'
end
【问题讨论】:
-
您能否提供一个关于如何调用 SP 的示例?
-
你的语法看起来不错。检查您传递给@cachStatus 的值。 (即,确保你没有通过一个)。
-
我从实体框架(来自 WCF 服务)和管理工作室中调用它,相同的行为都没有默认值
-
忘记
IF,只需使用:SET @cacheStatus = ISNULL(@cacheStatus,'notReady')。你可以使用SELECT @cacheStatus = ISNULL(@cacheStatus,'notReady'), @Xyz = ISNULL(@Xyz,'abc'), ...做多个
标签: sql-server stored-procedures