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方面的內容都是來自資料,自己並無親自測試。

發佈了4 篇原創文章 · 獲贊 0 · 訪問量 2300
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章