Pur*_*ish 6 sql sql-server stored-procedures sql-server-2008
我刚刚遇到一个有趣的问题,我正在用SQL编写一个程序.
在我的proc中我有2个日期,它们是默认为NULL的可选参数,我想检查这些参数是否为空并且如果不是我的proc的一部分,如果它们为null则则忽略proc的额外部分.
我做了一个相当基本的IF(@dateVariable <> NULL AND @DateVariable2 <> NULL)声明,但if语句永远不会工作,即使变量不为null,我会假设SQL正在努力将日期与NULL进行比较,这很奇怪,因为datetime可以为空.
为了解决这个问题我只是做了IF(DateVariable IS NOT NULL)正确的工作.我也尝试过IF( ISNULL(@DateVariable,'') <> '')也能正常工作
所以我的问题是为什么第一个IF不起作用,但第二个和第三个IF都这样做,因为两者都必须在某个时候将变量的内容与null进行比较?
例:
-----失败-----
DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP
IF (@Date <> NULL)
BEGIN
print('a')
END
Run Code Online (Sandbox Code Playgroud)
-----作品-----
DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP
IF (ISNULL(@Date,'') <> '')
BEGIN
print('a')
END
DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP
IF (@Date IS NOT NULL)
BEGIN
print('a')
END
Run Code Online (Sandbox Code Playgroud)
Pin*_*nyM 15
简单地说'NULL'不等于'NULL'.'NULL'与不确定状态相当,其中一个不确定的东西不一定等于其他不确定的东西.在测试空值时使用'IS NULL','ISNULL()'或'COALESCE()'.将ANSI_NULLS设置为"off"可以更改此行为,但它不是ANSI SQL标准.有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms191270.aspx.
比较空值时必须小心。比较的行为取决于 SET ANSI_NULLS 选项的设置。
当 SET ANSI_NULLS 为 ON 时,一个或多个表达式为 NULL 的比较不会产生 TRUE 或 FALSE;它产生未知。这是因为无法将未知值与任何其他值进行逻辑比较。如果将表达式与文字 NULL 进行比较,或者如果比较两个表达式并且其中一个的计算结果为 NULL,则会发生这种情况。
请参阅NULL 比较搜索条件
| 归档时间: |
|
| 查看次数: |
14875 次 |
| 最近记录: |