为什么日期字段被保存为null?

时间:2015-12-10 17:05:41

标签: sql sql-server sql-server-2008 tsql sql-server-2012

为什么 @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。

4 个答案:

答案 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

感谢您的帮助,因为它让我弄清楚究竟发生了什么。