当SQL Server排序时遇上了NULL值

这是一个经常被问到的问题。尤其是客户之前使用的是Oracle,那么他在使用SQL Server的时候会有 一个疑问,就是在处理NULL值上面,SQL Server与Oracle的行为不一样

在Oracle中,NULL值会认为是一个无穷大的值,所以如果按照升序排列的话,则会被排在最后面

在SQL Server中则正好相反,NULL值会被认为是一个无穷小的值,所以如果按照升序排列的话,则会 被排在最前面

SELECT [ID]
  FROM [demo].[dbo].[Orders] Order By ID

则会看到如下的效果

那么,有没有什么办法让SQL Server的这个默认机制与Oracle一样吗?答案是:没有

但我们可以想一些变通的办法,例如可以像下面这样写代码

SELECT [ID]

FROM [demo].[dbo].[Orders] Order By CASE WHEN ID IS NULL THEN 1 ELSE 0 END

这样的话,就可以看到如下的效果

如果该列有创建索引,那么可以看到如下的执行计划

但是,仍然还有其他的一种解决方案,可以把该列的默认值设置为一个很大的值,也就是说,如果用 户无法提供该列的值,则默认用一个很大的数字代替。如果是INT型,这个数字,可以是2147483647。这 样的情况下,如果排序的时候当然就不需要再进行判断了。

时间: 2024-08-31 23:02:41

当SQL Server排序时遇上了NULL值的相关文章

在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)

error|server|程序 错误:"在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) ",       上述错误我遇到两种情况,一种是在打开打开SQL Server 2005时弹出的,另一种是在应用程序连接SQL Server 2005时出现的.归纳了一下,由以下几个原因: 1.数据库引擎没有启动.  

采购SQL Server硬件时最容易犯的8个错误

建立全新的SQL Server系统可能比较棘手.SQL Server是真正注重利用硬件的产品,它的性能跟你如何配置服务器有很大的关系,尤其是如何配置你服务器的存储子系统.考虑到这一点,我们在下面列出了一些人们在采购SQL Server硬件时最容易犯的错误: 1.选择DIY路线.不要购买零部件自己组装SQL Server计算机,除非你只是用于非生产环境的开发计算机.通常情况下,服务器尤其是SQL Server用的计算机需要处理器,芯片组,内存控制器卡等等零部件匹配性非常好.例如,你需要能支持高热的

sql server 2005时发生18452错误解决方法

ODBC 测试sql server 2005时发生18452错误解决方法 用.net开发的网站连接数据库里发生错误,当访问静态页面里显示正常. 1.首先想到的是测试ODBC数据源,当用sql用户和密码登录时出现如下图错误: 2.因为是在客户服务器上安装,所以未设置sa的密码,由于安装时未勾选择了"windows身份验证",所以当你测试sql server 2005的用户时出现此错误. 3.打开"SQL Server Management Studio"双击数据库所在

java 解析xml文件-在JAVA中解析XML文件时遇上难题,向各位大虾求助。

问题描述 在JAVA中解析XML文件时遇上难题,向各位大虾求助. 在服务器进程中编写登录时出现以下错误提示: Exception in thread "Thread-0" java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl cannot be cast to javax.swing.text.Document at server.ServerThread.Lo

在SQL Server启动时自动执行存储过程。第1/2页_MsSql

sql Server提供了系统存储过程sp_procoption,这个存储过程可以用于当SQL Server服务启动时指派一个或者多个存储过程自动执行.这是一个很不错的选择,它可以用于多种多样的用途.比如,你可能在你的数据库中有开销很大的查询,这个查询在首次执行时会花费一些时间.通过使用sp_procoption,你可以在服务器启动时运行这个查询以此来预先编译执行计划,由此,你的某个用户就不会成为第一个运行这个特殊查询的不幸的人.我曾经用这个功能建立了一个我自己写的概要分析器服务器端跟踪的自动执

在SQL Server启动时自动执行存储过程。第1/2页

sql Server提供了系统存储过程sp_procoption,这个存储过程可以用于当SQL Server服务启动时指派一个或者多个存储过程自动执行.这是一个很不错的选择,它可以用于多种多样的用途.比如,你可能在你的数据库中有开销很大的查询,这个查询在首次执行时会花费一些时间.通过使用sp_procoption,你可以在服务器启动时运行这个查询以此来预先编译执行计划,由此,你的某个用户就不会成为第一个运行这个特殊查询的不幸的人.我曾经用这个功能建立了一个我自己写的概要分析器服务器端跟踪的自动执

解决Sql Server安装时提示挂起的方法

安装 SQL2000 时,系统经常会提示:操作被挂起,要求重新启动计算机,如图1: 图1 重新启动后,再次安装时问题仍然存在. 解决办法: 1:在开始菜单中点击运行,输入 regedit ,打开注册表. 2:展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 单击FileRenameOperations键,删除右侧界面中出现的PendingFileRenameOperations键值 3:重新安装 SQL S

sql-安装SQL server 2008 时老是出现以下错误,该怎么办呢?

问题描述 安装SQL server 2008 时老是出现以下错误,该怎么办呢? 解决方案 看下是不是.net 4.0没有安装好,系统是不是山寨盗版精简过的.建议使用原版. 解决方案二: 系统环境估计不干净,造成安装失败.或者老的sql server没有卸载干净. 解决方案三: 卸载干净后,重新安装,环境搭建有问题

如何快速删掉SQL Server登录时登录名下拉列表框中的选项

问题: 我以前创建了一个登录名如kpi,之后在"安全性-登录名" 里删掉了,但是每次登录时,登录名的下拉框中总是能显示登录名kpi,怎么把它删掉呢? 解决方案: 1).SQL Server 2008 R2和SQL Server 2008 先关闭数据库登录窗口,然后删除: %AppData%\Microsoft\Microsoft SQL Server\100\Tools\Shell\下的SqlStudio.bin文件.(直接在资源管理器中粘贴路径)再打开SSMS就看不到了. 2).SQ