如何理解CASE表達(dá)式作用及使用SQLServerCASE表達(dá)式代替動(dòng)態(tài)SQL

本篇文章為大家展示了如何理解CASE表達(dá)式作用及使用SQLServerCASE 表達(dá)式代替動(dòng)態(tài)SQL,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),綦江企業(yè)網(wǎng)站建設(shè),綦江品牌網(wǎng)站建設(shè),網(wǎng)站定制,綦江網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,綦江網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

SQLServerCASE表達(dá)式可以代替動(dòng)態(tài)SQL語(yǔ)句,使進(jìn)行大量更新查詢(xún)操作時(shí)可以提高查詢(xún)的效率。下面創(chuàng)新互聯(lián)小編來(lái)講解下CASE表達(dá)式作用有哪些?如何使用SQLServerCASE表達(dá)式代替動(dòng)態(tài)SQL?

CASE表達(dá)式作用有哪些

CASE語(yǔ)句是一個(gè)非常強(qiáng)大而有用的工具,你可以用它來(lái)解決你的SQLServer查詢(xún)問(wèn)題。你可能已經(jīng)可以很熟練地在執(zhí)行SELECT命令的時(shí)候使用它來(lái)模擬IF/ELSE從句處理。不過(guò),它的功用可遠(yuǎn)遠(yuǎn)不限于這類(lèi)型的處理。

CASE表達(dá)式可以用來(lái):

用于更新行的時(shí)候,避免使用光標(biāo)回路

在使用合計(jì)函數(shù)的時(shí)候執(zhí)行專(zhuān)門(mén)的處理

創(chuàng)建動(dòng)態(tài)ORDERBY和WHERE從句而無(wú)需使用動(dòng)態(tài)SQL

現(xiàn)在讓我們來(lái)看看一些應(yīng)用例子:

首先,新建一個(gè)名為Customer的表,插入一些行:

CREATETABLEdbo.Customer

(

customeridINTIDENTITYPRIMARYKEY,

firstnameVARCHAR(40)NOTNULL,

lastnameVARCHAR(40)NOTNULL,

statecodeVARCHAR(2)NOTNULL,

totalsalesmoneyNOTNULLDEFAULT0.00

)

INSERTINTOdbo.Customer(firstname,lastname,statecode,totalsales)

SELECT'Thomas','Jefferson','VA',100.00

INSERTINTOdbo.Customer(firstname,lastname,statecode,totalsales)

SELECT'John','Adams','MA',200.00

INSERTINTOdbo.Customer(firstname,lastname,statecode,totalsales)

SELECT'Paul','Revere','MA',300.00

INSERTINTOdbo.Customer(firstname,lastname,statecode,totalsales)

SELECT'Ben','Franklin','PA',400.00

GO

如何使用SQLServerCASE表達(dá)式代替動(dòng)態(tài)SQL

例一

現(xiàn)在遇到一個(gè)需要向表添加一個(gè)狀態(tài)描述列用于生成所需報(bào)表的要求。你當(dāng)然可以使用指針掃描整個(gè)表,達(dá)到更新每一行的目的,但是這樣做很花時(shí)間,降低系統(tǒng)性能表現(xiàn)。你也可以創(chuàng)建多個(gè)UPDATE語(yǔ)句,但這樣也好不到哪里去。但是,你可以把一個(gè)UPDATE語(yǔ)句和CASE結(jié)合使用,這樣可以只需要一個(gè)SET操作就能夠高效率地更新整個(gè)表。

ALTERTABLEdbo.CustomerADDstatedescriptionVARCHAR(50)NULL

GO

UPDATEdbo.Customer

SETstateDescription=CASEWHENstatecode='MA'THEN'Massachusetts'

WHENstatecode='VA'THEN'Virginia'

WHENstatecode='PA'THEN'Pennsylvania'

ELSENULL

END

例二

現(xiàn)在我們又接到第二個(gè)請(qǐng)求,需要報(bào)告所有客戶(hù)的總數(shù)、Massachusetts客戶(hù)的總數(shù)以及所有Massachusetts客戶(hù)的平均銷(xiāo)量。我們當(dāng)然可以把查詢(xún)范圍限制為Massachusetts客戶(hù),但是這樣要獲得所有客戶(hù)總數(shù)就很麻煩。要解決這個(gè)問(wèn)題,你可以編寫(xiě)一個(gè)在合計(jì)函數(shù)里使用CASE表達(dá)的查詢(xún),就能夠獲得Massachusetts客戶(hù)的信息了:

SELECTCOUNT(*)ASTotalCustomers,

SUM(CASEWHENstatecode='MA'THEN1ELSENULLEND)ASTotalMassCustomers,

AVG(CASEWHENstatecode='MA'THENtotalsalesELSENULLEND)ASTotalMassSales

FROMdbo.Customer

因?yàn)閳?zhí)行合計(jì)函數(shù)的時(shí)候會(huì)忽略NULL值,我們可以輕松獲得需要的總數(shù)。

現(xiàn)在又來(lái)了新的請(qǐng)求。我們需要一個(gè)可以被應(yīng)用程序調(diào)用的存儲(chǔ)過(guò)程,但是用戶(hù)希望能夠可以通過(guò)firstname或lastname來(lái)排序。你可能會(huì)想要用動(dòng)態(tài)SQL來(lái)解決這個(gè)問(wèn)題,不過(guò)我們還可以使用CASE來(lái)代替動(dòng)態(tài)SQL:

CREATEPROCEDUREdbo.getCustomerData@sortbyVARCHAR(9),@sortdirectionCHAR(4)

AS

SETnocountON

SELECTcustomerid,firstname,lastname,statecode,statedescription,totalsales

FROMdbo.Customer

ORDERBY

CASE@sortdirection

WHEN'asc'THEN

CASE@sortby

WHEN'firstname'THENfirstname

WHEN'lastname'THENlastname

END

END

ASC,

CASE@sortdirection

WHEN'desc'THEN

CASE@sortby

WHEN'firstname'THENfirstname

WHEN'lastname'THENlastname

END

END

DESC

GO

EXECdbo.getCustomerData'lastname','desc'

例四

最后一個(gè)請(qǐng)求。我們需要修改上述的存儲(chǔ)過(guò)程來(lái)達(dá)到通過(guò)某個(gè)特定狀態(tài)來(lái)查找客戶(hù)。假如客戶(hù)狀態(tài)被省略,則返回所有狀態(tài)的客戶(hù)。

ALTERPROCEDUREdbo.getCustomerData@sortbyVARCHAR(9),@sortdirectionCHAR(4),@statecodeVARCHAR(2)=NULL

AS

SETnocountON

SELECTcustomerid,firstname,lastname,statecode,statedescription,totalsales

FROMdbo.Customer

WHEREstatecode=CASEWHEN@statecodeISNOTNULLTHEN@statecode

ELSEstatecode

END

ORDERBY

CASE@sortdirection

WHEN'asc'THEN

CASE@sortby

WHEN'firstname'THENfirstname

WHEN'lastname'THENlastname

END

END

ASC,

CASE@sortdirection

WHEN'desc'THEN

CASE@sortby

WHEN'firstname'THENfirstname

WHEN'lastname'THENlastname

END

END

DESC

GO

EXECdbo.getCustomerData'lastname','desc','MA'

上述內(nèi)容就是如何理解CASE表達(dá)式作用及使用SQLServerCASE 表達(dá)式代替動(dòng)態(tài)SQL,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章題目:如何理解CASE表達(dá)式作用及使用SQLServerCASE表達(dá)式代替動(dòng)態(tài)SQL
文章鏈接:http://bm7419.com/article42/ipdohc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、云服務(wù)器、品牌網(wǎng)站設(shè)計(jì)網(wǎng)站設(shè)計(jì)公司、商城網(wǎng)站、App開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)