SELECT id,
公司主營(yíng)業(yè)務(wù):網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶(hù)真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。創(chuàng)新互聯(lián)推出果洛州免費(fèi)做網(wǎng)站回饋大家。
CASE WHEN id=1 THEN firstname ELSE user END 'username'
FROM tb1
如果是查詢(xún)條件要用這個(gè)就套一個(gè)
SELECT *
FROM tb1 a
WHERE username=(SELECT CASE WHEN id=1 THEN firstname ELSE user END
FROM tb1
WHERE id=a.id);
下面我們看一張表:想一想在數(shù)據(jù)庫(kù)SQLServer中我們?nèi)绾文芨?jiǎn)便的向這張表格中添加數(shù)據(jù)呢?
仔細(xì)觀察此表我們不難發(fā)現(xiàn),ID字段的這列數(shù)據(jù)的添充是有規(guī)律可循的,它是一個(gè)等比自增的數(shù)列,向數(shù)據(jù)表中添加這樣的數(shù)據(jù)有沒(méi)有簡(jiǎn)單的方法呢?
這就談到了SQLServer標(biāo)識(shí)列的問(wèn)題。我查詢(xún)一些資料做了總結(jié),在此和大家一起分享受與交流。
(1)標(biāo)識(shí)列的定義
標(biāo)識(shí)列,(通常也稱(chēng)為“標(biāo)識(shí)字段”或者稱(chēng)為“自動(dòng)增長(zhǎng)字段”)是一行記錄區(qū)別其它記錄的標(biāo)識(shí),為的也是能唯一地檢索出該行記錄。
注意:一個(gè)表中只能有一個(gè)標(biāo)識(shí)列(標(biāo)識(shí)字段),一般是把“主鍵”設(shè)為標(biāo)識(shí)列。
(2)如何把一個(gè)字段設(shè)為標(biāo)識(shí)列?
下面我以SQLServer2008為例來(lái)看一下它的設(shè)置步驟:
如:右鍵單擊——表Person3,左鍵單擊——“設(shè)計(jì)”屬性,然后選中要設(shè)為標(biāo)識(shí)列的字段,在“標(biāo)識(shí)規(guī)范”中,將字段的“是標(biāo)識(shí)”設(shè)為“是”,最后關(guān)閉此窗口,保存即可。
從上圖中“標(biāo)識(shí)規(guī)范”中看到,標(biāo)識(shí)列中還有個(gè)“標(biāo)識(shí)種子”和“標(biāo)識(shí)增量”,主要是為了避免重復(fù)值的出現(xiàn),便于查詢(xún)。
1.
標(biāo)識(shí)種子
是開(kāi)始的數(shù)是多少,默認(rèn)為1。
2.
標(biāo)識(shí)增量(也稱(chēng)為增長(zhǎng)種子)是每增加一條數(shù)據(jù)增加的值是多少,默認(rèn)為1。
3.
標(biāo)識(shí)列不容許插入值,是自動(dòng)給值的,強(qiáng)制給會(huì)報(bào)錯(cuò)。
identity(1,1)
那么該列標(biāo)識(shí)種子是1,增長(zhǎng)種子也是1。第一個(gè)參數(shù)是標(biāo)實(shí)種子,第二個(gè)參數(shù)是增長(zhǎng)種子。
注意:在設(shè)置標(biāo)識(shí)列之前,要在—‘工具’菜單中找到—‘選項(xiàng)’—在選項(xiàng)中—把‘阻止保存要求重新建表的更改’的“√”去掉,否則SQLServer要修改表的標(biāo)識(shí)列沒(méi)法修改。
(3)設(shè)置標(biāo)識(shí)列的好處
標(biāo)識(shí)列是自動(dòng)增長(zhǎng)的,從種子開(kāi)始,依次遞增,遞增量位自己設(shè)置的。比如:種子是1,增長(zhǎng)量為1,那么標(biāo)識(shí)列的值是:1、2、3、4、5……依次類(lèi)推。所以你寫(xiě)Insert語(yǔ)句的時(shí)候,不用寫(xiě)標(biāo)識(shí)列的值。
也就是說(shuō):標(biāo)識(shí)列實(shí)現(xiàn)了字段自增,解決的是并發(fā)的問(wèn)題,不用開(kāi)發(fā)人員控制自增,SQLServer會(huì)自動(dòng)分配標(biāo)識(shí)列的值,如果兩個(gè)人同時(shí)往數(shù)據(jù)庫(kù)里面插數(shù)據(jù)時(shí),將會(huì)產(chǎn)生唯一的自動(dòng)增加為標(biāo)識(shí).
microsoft sql server management studio中展開(kāi)對(duì)應(yīng)表下面的列信息不就可以看到列的詳細(xì)信息了么?當(dāng)然這是可以的,但這里我們主要講的時(shí)如何利用sql語(yǔ)句來(lái)查詢(xún)指定表的列信息。
利用sql語(yǔ)句來(lái)查詢(xún)列信息,就是要用到系統(tǒng)視圖sys.columns,這個(gè)視圖記錄了數(shù)據(jù)庫(kù)中所有表,視圖,表值函數(shù)等的所有列信息。我們可以利用語(yǔ)句select * from sys.columns來(lái)查看這個(gè)視圖返回的信息。
sys.columns返回的列比較多,大部分情況下很多列的信息我們可能用不到,下面我們只解釋一下比較常用的列的信息。
1,object_id--這個(gè)列是比較重要的,它是返回當(dāng)前列所屬表的ID。利用它,我們就可以查詢(xún)指定表的所有列信息,比如下面的sql語(yǔ)句是查詢(xún)表table1的所有列信息。
select * from sys.columns where object_id=object_id('table1')
2,name--該列的列名。
3,column_id--該列在數(shù)據(jù)庫(kù)中的ID,注意,數(shù)據(jù)庫(kù)中任何對(duì)象的ID都是唯一的。
4,system_type_id--該列的類(lèi)型的ID,和下面max_length,precision,scale三列一起可以來(lái)舉個(gè)示例。
5,max_length--該列的最大長(zhǎng)度
6,precisionp--如果這列是數(shù)值列,那么這是該列的精度,否則就是0
7,scale--如果這列是數(shù)值列,那么這就是列的小數(shù)位數(shù),否則就是0
system_type_id,max_length,precision,scale四列結(jié)合系統(tǒng)視圖sys.types一起我們來(lái)舉個(gè)示例。
如果我們要查詢(xún)表table1的所有列,及列的類(lèi)型,列的精度,列的小數(shù)位數(shù),sql語(yǔ)句如下:
select a.name,b.name,a.max_length,a.precision,a.scale
from sys.columns a left join sys.types b on a.user_type_id=b.user_type_id
where a.object_id=object_id('table1')
8,is_nullable--該列是否可以為null
9,is_identity--該列是否是標(biāo)識(shí)列
10,is_computed--該列是否是計(jì)算列。利用該列,我們也就可以查詢(xún)某個(gè)表的所有計(jì)算列了,比如我們要查詢(xún)表table1中的所有計(jì)算列,sql語(yǔ)句如下:
select * from sys.columns where object_id=object_id('table1') and is_computed=1
sys.columns視圖中常用的列就是這10列了,其它列的信息大家可以到SQLServer 2005聯(lián)機(jī)叢書(shū)中查詢(xún)。