`
1000copy
  • 浏览: 72420 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Sqlserver 缺乏很多基本类型

阅读更多


 

编写了n年的T-SQL,一回头,发现这门语言居然缺少很多基本的类型。

 

 1.枚举


虽然枚举看起来就是数字,但是枚举比起数字来说更加好读mysqlenum,比如billtype(单据类型)把它定义为枚举,从而在编写sql的时候更加方便。

 

mysql支持枚举案例:

 

mysql> CREATE TABLE enum_test(

e ENUM('fish', 'apple', 'dog') NOT NULL

);

INSERT INTO enum_test(e) VALUES('fish'), ('dog'), ('apple');

 

用字符串表达数字,并且和数字的效率一样高,还可以in操作,虽然不太完美,但是也在完美的路上了。更细节的,如果插入的不在规定范围内,mysql会把它当成null处理,这点不太好。

 

比如我们常常会遇到这样的代码:

 

    sql = @"select 0  buytotal,-(ifnull(sum(if(bill.vchtype in (34,6,66,28) ...";

如果支持枚举的话,代码应该类似:

 

    sql = Foo(@"select 0  buytotal,-(ifnull(sum(if(dlya.vchtype in (vchtype.billsale,vchtype.billbuy) ...";

感觉就会好很多了。

可是 Sqlserver 只能用int来代替。

 

2. 布尔类型

无论列定义,还是TSQL变量,参数,都不支持bool类型,智能用bit模拟。显然1/0,不如 true/false 更好阅读和使用。

3. 数组

Sql2008 有表变量的支持,聊胜于无。  数组,多常用的类型!     

 

4. 类(class

尽管类比一般的类型要复杂的多,可是类依然是类型。sqlserver也是没有这样的类型的。

 以我们的产品为例,动则几百个存储过程,这样的复杂度,当然就有了分层封装的需求。可是sqlserver并不能很好的支持我们的想法。再说定义聚集函数这样的特殊功能,用oracle,就采用sql就可以做到——因为它支持类和包。sqlservermysql要做这样的聚集函数,都必须用dll,麻烦啊

 

人的适应能力真强,想起刚刚用php之类的语言,连调试器也没有,用print一路的也过来了。不过毕竟过的不爽。

 

注:oracle方面的内容都是来自资料,自己并无亲自测试。

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics