SQL Server數(shù)據(jù)庫ISNULL函數(shù)的應(yīng)用實(shí)例
SQL Server數(shù)據(jù)庫ISNULL函數(shù)的使用是本文我們主要要介紹的內(nèi)容,我們通過實(shí)例來說明ISNULL函數(shù)的使用,接下來我們就開始介紹這部分內(nèi)容。
1.利用ISNULL函數(shù)干掉OR運(yùn)算!
題目是查詢表中VAL小于20的值,包括NULL值:
- SELECT * FROM T WHERE ISNULL(VAL,-1) < 20
- SELECT * FROM T WHERE VAL IS NULL OR VAL < 20
兩個SQL具有相同的輸出結(jié)果
- GRP_A GRP_B GRP_C VAL
- ---- ----- ----- ---
- a1 b1 c1 10
- a1 b1 c2 10
- a2 b3 c3 NULL
- a2 b3 c3 NULL
- a2 b3 c3 NULL
- (5 行受影響)
- GRP_A GRP_B GRP_C VAL
- ---- ------ ---- --
- a1 b1 c1 10
- a1 b1 c2 10
- a2 b3 c3 NULL
- a2 b3 c3 NULL
- a2 b3 c3 NULL
- (5 行受影響)
2.ISNULL非主流更新表存儲過程示例
如某更新表存儲過程如下:
- CREATE PROC UpdateT(
- @ID INT,
- @GRP_A VARCHAR(10) = NULL,
- @GRP_B VARCHAR(10) = NULL,
- @GRP_C VARCHAR(10) = NULL,
- @VAL INT = 0
- )AS
- BEGIN
- UPDATE T SET
- GRP_A = @GRP_A,
- GRP_B = @GRP_B,
- GRP_C = @GRP_C,
- VAL = @VAL
- WHERE ID = @ID
- END
當(dāng)我們使用這個存儲過程的時候,必須先得該行的所有記錄,再把所有記錄更新回去,可是這并不總是必須的。有時候手頭只有兩個數(shù)據(jù):ID和VAL,我只想更新這個VAL,又有時候手頭有另外兩個數(shù)據(jù):ID和GRP_A,這時候只更新GRP_A列即可。還有很多情況,如:
僅更新GRP_A,
僅更新GRP_A,GRP_B
僅更新GRP_A,GRP_B,GRP_C
僅更新GRP_A,GRP_B,GRP_C,VAL
...
這樣的組合太多了,要想一勞永逸解決問題那就得更新任何字段前,先得到整行記錄,再整行更新回去,于是多了一項(xiàng)工作:先查詢,再更新,那沒有辦法不先查詢直接更新某一列呢?而且列可以任意組合?
在給出答案前,先聲明一句:這個方法算不上完美解決方案,僅僅是個思路罷了,雖然我一直認(rèn)為沒什么影響,但如果要在正式項(xiàng)目中使用,建議還是多聽聽DBA的意見!
非主流更新任意列存儲過程:
- CREATE PROC UpdateT(
- @ID INT,
- @GRP_A VARCHAR(10) = NULL,
- @GRP_B VARCHAR(10) = NULL,
- @GRP_C VARCHAR(10) = NULL,
- @VAL INT = 0
- )AS
- BEGIN
- UPDATE T SET
- GRP_A = ISNULL(@GRP_A,GRP_A),
- GRP_B = ISNULL(@GRP_B,GRP_B),
- GRP_C = ISNULL(@GRP_C,GRP_C),
- VAL = ISNULL(@VAL,VAL)
- WHERE ID = @ID
- END
關(guān)于SQL Server數(shù)據(jù)庫ISNULL函數(shù)的應(yīng)用實(shí)例就介紹到這里了,如果您想了解更多SQL Server數(shù)據(jù)庫的知識,可以看一下這里的文章:http://database.51cto.com/sqlserver/,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】