日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServerCTEs的語法與功能

以下的文章主要向大家講述的是SQL Server CTEs 的遞歸功能是SQL Server數(shù)據(jù)庫中的三種保存臨時結(jié)果的實(shí)際操作方法之一。其另兩種是臨時表與View,當(dāng)然你也可以說View并不保存數(shù)據(jù),從這一點(diǎn)上來將, CTE更像View一些。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、三原網(wǎng)絡(luò)推廣、微信小程序定制開發(fā)、三原網(wǎng)絡(luò)營銷、三原企業(yè)策劃、三原品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供三原建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

當(dāng)你的查詢需要從一個源表中統(tǒng)計(jì)出結(jié)果,基于這個結(jié)果再做進(jìn)一步的統(tǒng)計(jì),如此3次以上的話,你必然會用到View或者臨時表,現(xiàn)在你也可以考慮用CTE了。

CTE的語法相當(dāng)?shù)暮唵? 如下:

With CTE的名字 AS

(

子查詢

)

Select * from CTE的名字

SQL Server CTEs支持在定義時引用自身,從而可以達(dá)到遞歸的目的,看下面的例子(1):

 
 
 
  1. ---prepare test data   
  2. SET NOCOUNT ON;   
  3. CREATE TABLE dbo.Parts   
  4. (   
  5. partid INT NOT NULL PRIMARY KEY,   
  6. partname VARCHAR(25) NOT NULL   
  7. );   
  8. INSERT INTO dbo.Parts(partid, partname)   
  9. select 1, 'Black Tea'   
  10. union all select 2, 'White Tea'  
  11. union all select 3, 'Latte'  
  12. union all select 4, 'Espresso'  
  13. CREATE TABLE dbo.BOM   
  14. (   
  15. partid INT NOT NULL REFERENCES dbo.Parts,   
  16. assemblyid INT NULL REFERENCES dbo.Parts,   
  17. unit VARCHAR(3) NOT NULL,   
  18. qty DECIMAL(8, 2) NOT NULL,   
  19. UNIQUE(partid, assemblyid),   
  20. CHECK (partid <> assemblyid)   
  21. );   
  22. INSERT INTO dbo.BOM(partid, assemblyid, unit, qty)   
  23. select 1, NULL, 'EA', 1.00  
  24. union all  
  25. select 2, 1, 'EA', 1.00  
  26. union all  
  27. select 3, 2, 'EA', 1.00  
  28. union all  
  29. select 4, 3, 'EA', 1.00  
  30. -- perform the test   
  31. WITH BOMTC AS(   
  32. SELECT assemblyid, partid   
  33. FROM dbo.BOM   
  34. WHERE assemblyid IS NOT NULL   
  35. UNION ALL   
  36. SELECT P.assemblyid, C.partid   
  37. FROM BOMTC AS P   
  38. JOIN dbo.BOM AS C ON C.assemblyid = P.partid   
  39. )   
  40. SELECT DISTINCT assemblyid, partid FROM BOMTC;   

輸出結(jié)果如下:

例子(2):

 
 
 
  1. create table Employee   
  2. (   
  3. MgrId int,   
  4. EmpId int,   
  5. Title nvarchar(256)   
  6. )   
  7. insert into employee  
  8. select NULL, 1 ,'CEO'   
  9. union all  
  10. select 1, 2, 'VP'   
  11. union all  
  12. select 2, 3, 'Dev Manager'  
  13. union all  
  14. select 2, 4, 'QA Manager'   
  15. union all  
  16. select 1, 5, 'Sales Manager'   
  17. union all  
  18. select 3, 30, 'Developer'   
  19. union all  
  20. select 3, 31, 'Developer'   
  21. union all  
  22. select 4, 40, 'Tester'  
  23. union all   
  24. select 4, 41, 'Tester'   
  25. With DirectReports as   
  26. (   
  27. select MgrId, EmpId, Title, 0 as [Level] from Employee where MgrId is null   
  28. union all   
  29. select a.MgrId, a.EmpId, a.Title, [Level]+1 as [Level]   
  30. from Employee a join DirectReports b on a.MgrId=b.EmpId   
  31. )   
  32. select * from DirectReports   

結(jié)果:

講解:重點(diǎn)是子查詢中的兩個select語句,以上述例子加以說明:

***個Select子句被稱為錨點(diǎn)語句,它返回的結(jié)果跟普通的SQL沒有區(qū)別,在這里返回MgrID為null的員工。

第二個子句就沒那么普通了,它被稱為遞歸語句,請注重到在from后面, Employee和DirectReport進(jìn)行了鏈接操作。你一定會問,DirectReport的定義還沒完成,這個名字代表什么結(jié)果呢?答案是它不只是代表了一個結(jié)果,實(shí)際上代表了一系列的結(jié)果。換句話說,在DirectReport這個名字下,包含著DirectReport0,DirectReport1,DirectReport2...這些較小的集合。

DirectReport0 是Employee和錨點(diǎn)結(jié)合的產(chǎn)物;

DirectReport1 是Employee和 DirectReport0 結(jié)合的產(chǎn)物;

依次類推, DirectReport n是Employee和DirectReport n-1結(jié)合的產(chǎn)物;

當(dāng)DirectReport_n為空的時候,這個過程就結(jié)束了。

*** 錨點(diǎn)和DirectReport0,DirectReport1... 的并集就是DirectReport的內(nèi)容。

作為一個程序員,每次看到遞歸的程序,必然會想到無限遞歸這個錯誤。為了避免了在開發(fā)階段,無限遞歸導(dǎo)致數(shù)據(jù)庫的崩潰,SQL Server提供了一個QueryHint, MaxRecursion,可以控制遞歸的***層數(shù),假如超過這個數(shù)字而仍為結(jié)束,則視為代碼錯誤,強(qiáng)制退出。如:Option(MaxRecursion 10)

可見SQL Server CTEs可以用來遞歸操作樹形結(jié)構(gòu)的數(shù)據(jù)表。

【編輯推薦】

  1. SQL Server浮點(diǎn)數(shù)據(jù)類型的詳細(xì)解析
  2. 卸載SQL Server 2005組件的正確順序
  3. SQL Server 2000刪除實(shí)戰(zhàn)演習(xí)
  4. SQL Server存儲過程的命名標(biāo)準(zhǔn)如何進(jìn)行?
  5.  Server數(shù)據(jù)庫的臨時表的正確操作步驟

分享題目:SQLServerCTEs的語法與功能
分享URL:http://www.5511xx.com/article/cccgpcj.html