在SQL Server 2000中遇到一个怪问题。执行下面语句,居然返回大量结果:
select * from info where uid is null and uid is not null
研究返回的字段值,没有发现有什么异常。重建索引也没解决问题。
最后,把整个表导出成文本文件,返回再导入。问题解决!
原文http://jijian91.com/blog20070419/sqlserver-is-null-and-is-not-null.html
在SQL Server 2000中遇到一个怪问题。执行下面语句,居然返回大量结果:
select * from info where uid is null and uid is not null
研究返回的字段值,没有发现有什么异常。重建索引也没解决问题。
最后,把整个表导出成文本文件,返回再导入。问题解决!
原文http://jijian91.com/blog20070419/sqlserver-is-null-and-is-not-null.html
null是个非常特殊、令人讨厌的值,什么值与null的运算结果都是null,常常导致语句错误。所以在设计库表结构时,常常设置default值,避免null的出现。但这样会增大数据文件的体积,浪费资源。当表中数值很稀疏时,这种浪费是非常惊人的。
判断是否等于null,不能用=null和<>null,要用 is null 和 is not null 。
设置字段值为null,可以用 update XX set YY=null。null外面不要加引号。
插入新记录用 insert XXX (YYY) values(null)。null外面不要加引号。
特别要注意null与”NULL”、”null”的区别。在SQL Server查询分析器中,null与”NULL”的显示完全相同,非常容易混淆!
几个小技巧,用到了就记下来。我用的是SQL Server 2000,不是SQL Server 2005。
原文http://jijian91.com/blog20070412/sql-server-improve-performance.html
一直在用SQL Server 2000,但很多问题都没深究。该总结一下了。
存储过程和用户定义函数都是“SQL语句组成的子程序,用以封装代码以便重复使用”。但区别也是显而易见的。简单说,存储过程功能强大,但调用不便,用户函数正相反。
用户定义函数的优点:
可以在SQL语句中调用,直接使用返值,从而形成复杂的SQL应用。
存储过程则只能用execute命令调用,用输出参数的到返回的结果。
用户定义函数的缺点:
能在函数中使用的语句有严格限制:
| @@CONNECTIONS | @@TOTAL_ERRORS |
变通办法:
要解决用户函数的种种限制,可以巧妙运用用户函数调用存储过程。
比如,需要在函数中用getdate,就写个存储过程返回getdate的结果。然后从函数里去调用这个存储过程。需要在函数中使用update等,也可类推。
原文http://jijian91.com/blog20070330/sql-server-procedure-vs-function.html
据《中国日报》报道,詹姆斯·格雷(James Grey)1月28日出海失踪。以下是原文:
1月28日早晨,格雷独自驾驶一条游艇,驶往位于旧金山金门大桥以西40公里的费拉隆岛,为去年过世的老母亲撒骨灰,并打算当晚返回。早上10点左右,妻子接到他的电话,他赞叹天气很好,有海豚在船周围游来游去。然后,格雷再也没有任何音讯了。到1月31日为止,美国海岸警卫队沿着太平洋海岸,搜索了格雷失踪地点周围4万平方公里的海域,都没有发现他。
查了一下,James Grey生于1944年。在IBM公司期间,解决了关系型数据库的事务处理问题,并因此获得1998年图灵奖。后供职于微软公司,进行SQL Server研究。请参看他在微软公司的介绍主页。
图灵奖是计算机界的最高奖,每年只授予一人。获奖者都是各领域的泰斗,很多人都有XXX之父的称号。
但原报道中还提到他是google earth的奠基人。google了一翻,也没找到他转投google的消息。如果仅仅因为google earth用了数据库,就把他封成奠基人,那真太匪夷所思了。况且,google earth未必使用关系型数据库。
2.3更新:
看到电视上也报道了。同样错误地称其为”google earth的奠基人”。也不进行起码的核对,真是让人啼笑皆非。