久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何理解CASE表達式作用及使用SQLServerCASE 表達式代替動態SQL

151次閱讀
沒有評論

共計 3006 個字符,預計需要花費 8 分鐘才能閱讀完成。

行業資訊    
數據庫    
如何理解 CASE 表達式作用及使用 SQLServerCASE 表達式代替動態 SQL

本篇文章為大家展示了如何理解 CASE 表達式作用及使用 SQLServerCASE 表達式代替動態 SQL,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

SQLServerCASE 表達式可以代替動態 SQL 語句,使進行大量更新查詢操作時可以提高查詢的效率。下面丸趣 TV 丸趣 TV 小編來講解下 CASE 表達式作用有哪些? 如何使用 SQLServerCASE 表達式代替動態 SQL?

CASE 表達式作用有哪些

CASE 語句是一個非常強大而有用的工具,你可以用它來解決你的 SQLServer 查詢問題。你可能已經可以很熟練地在執行 SELECT 命令的時候使用它來模擬 IF/ELSE 從句處理。不過,它的功用可遠遠不限于這類型的處理。

CASE 表達式可以用來:

用于更新行的時候,避免使用光標回路

在使用合計函數的時候執行專門的處理

創建動態 ORDERBY 和 WHERE 從句而無需使用動態 SQL

現在讓我們來看看一些應用例子:

首先,新建一個名為 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 表達式代替動態 SQL

例一

現在遇到一個需要向表添加一個狀態描述列用于生成所需報表的要求。你當然可以使用指針掃描整個表,達到更新每一行的目的,但是這樣做很花時間,降低系統性能表現。你也可以創建多個 UPDATE 語句,但這樣也好不到哪里去。但是,你可以把一個 UPDATE 語句和 CASE 結合使用,這樣可以只需要一個 SET 操作就能夠高效率地更新整個表。

ALTERTABLEdbo.CustomerADDstatedescriptionVARCHAR(50)NULL

GO

UPDATEdbo.Customer

SETstateDescription=CASEWHENstatecode= MA THEN Massachusetts

WHENstatecode= VA THEN Virginia

WHENstatecode= PA THEN Pennsylvania

ELSENULL

END

例二

現在我們又接到第二個請求,需要報告所有客戶的總數、Massachusetts 客戶的總數以及所有 Massachusetts 客戶的平均銷量。我們當然可以把查詢范圍限制為 Massachusetts 客戶,但是這樣要獲得所有客戶總數就很麻煩。要解決這個問題,你可以編寫一個在合計函數里使用 CASE 表達的查詢,就能夠獲得 Massachusetts 客戶的信息了:

SELECTCOUNT(*)ASTotalCustomers,

SUM(CASEWHENstatecode= MA THEN1ELSENULLEND)ASTotalMassCustomers,

AVG(CASEWHENstatecode= MA THENtotalsalesELSENULLEND)ASTotalMassSales

FROMdbo.Customer

因為執行合計函數的時候會忽略 NULL 值,我們可以輕松獲得需要的總數。

現在又來了新的請求。我們需要一個可以被應用程序調用的存儲過程,但是用戶希望能夠可以通過 firstname 或 lastname 來排序。你可能會想要用動態 SQL 來解決這個問題,不過我們還可以使用 CASE 來代替動態 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

例四

最后一個請求。我們需要修改上述的存儲過程來達到通過某個特定狀態來查找客戶。假如客戶狀態被省略,則返回所有狀態的客戶。

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

上述內容就是如何理解 CASE 表達式作用及使用 SQLServerCASE 表達式代替動態 SQL,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-17發表,共計3006字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 尤溪县| 浦东新区| 宁都县| 永州市| 祁连县| 廉江市| 蕲春县| 德令哈市| 密山市| 永宁县| 星座| 阿拉尔市| 外汇| 文登市| 肇州县| 丹棱县| 聂荣县| 琼海市| 青海省| 炉霍县| 赞皇县| 牡丹江市| 祁阳县| 房山区| 师宗县| 庆阳市| 清远市| 岑巩县| 武威市| 巴林左旗| 大关县| 巩留县| 莱芜市| 江山市| 丹江口市| 井陉县| 兰溪市| 西林县| 原阳县| 衡水市| 萨迦县|