为什么 @OpeningDate 会被保存为NULL,即使我这样做了。
PROCEDURE [dbo].[InsertCaseANDHearingDetails]
@HearingDate datetime,
@IsOpeningDate bit= null,
@OpeningDate date= null,
AS
Begin
IF(@IsOpeningDate = 0)
Begin
Set @OpeningDate= (Select Convert(varchar, @HearingDate, 106))
End
Insert Into Hearings
values (@HearingDate, @OpeningDate)
End
即使我正在计算它并且听力日期不为空,但为什么OpeningDate被保存为NULL。
答案 0 :(得分:3)
@HearingDate != NULL
无效。此比较的结果始终为unknown
。请改用@HearingDate is not null
。
由于变量@HearingDate
未初始化,因此其值为null
。
此外,变量@OpeningDate
不会设置为Select Convert(varchar, @HearingDate, 106)
,因为if
条件的评估结果为unknown
。
因此,当您从表中选择值时,它们将是null
。
编辑:
@IsOpeningDate bit= null
...
IF(@IsOpeningDate = 0)
此条件评估为unknown
,因为这样做0 = null
。您无法与null
进行比较。
答案 1 :(得分:0)
如果您在Proc。
的开头使用以下内容,它将起作用SET ANSI_NULLS OFF
基本上 NULL 无法与自身进行比较,因为这不是一个值。如果有的话,您希望引擎将其视为一个引擎,则需要设置ANSI_NULLS
属性。也就是说,我希望任何一天都能使用@ vkp的答案。
根据您的编辑,看起来不符合以下条件:
IF(@IsOpeningDate = 0)
因此,它仍为NULL。
答案 2 :(得分:0)
在if条件中为什么不检查为null而不是将其与0进行比较
您的查询
option
我的建议
IF(@IsOpeningDate = 0)
答案 3 :(得分:0)
很抱歉,我错误的是在Insert语句中没有提及参数,因为允许NULL,所以它插入了NULL
感谢您的帮助,因为它让我弄清楚究竟发生了什么。