当前位置:  开发笔记 > 编程语言 > 正文

替代WHERE子句中的SET ANSI_NULLS OFF

如何解决《替代WHERE子句中的SETANSI_NULLSOFF》经验,为你挑选了1个好方法。

我有一个SP,它有一个非常复杂的SQL语句,我需要能够将某些列与NULL进行比较,例如

...
FROM Categories
WHERE PID = @parentID

@parentID是一个SP参数,可以是有效的NULL.
PID(父ID)uniqueidentifier也可以是有效的NULL(顶级类别).我可以使用,SET ANSI_NULLS OFF但文档说:

在SQL Server的未来版本中,ANSI_NULLS将始终为ON,并且将选项明确设置为OFF的任何应用程序都将生成错误.避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序.

什么可以是一个优雅的方式,而不是与重复相同的查询(S)IS NULL的情况下@parentID=NULL(也不能使用动态SQL):

IF @parentID IS NULL 
  SELECT...WHERE PID IS NULL
ELSE
  SELECT...WHERE PID = @parentID

编辑:我想避免一个IF因为我讨厌重复(巨大)代码.



1> Andy Korneye..:

就像是:

select ..
FROM Categories
WHERE PID = @parentID or (PID is null and @parentID is null)

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有