成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server CTEs的語法與功能

數據庫 SQL Server
我們今天主要向大家講述的是SQL Server CTEs 的遞歸功能,CTEs是SQL Server數據庫中的三種保存臨時結果的主要操作方法之一。

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

當你的查詢需要從一個源表中統計出結果,基于這個結果再做進一步的統計,如此3次以上的話,你必然會用到View或者臨時表,現在你也可以考慮用CTE了。

CTE的語法相當的簡單, 如下:

With CTE的名字 AS

(

子查詢

)

Select * from CTE的名字

SQL Server CTEs支持在定義時引用自身,從而可以達到遞歸的目的,看下面的例子(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;   

輸出結果如下:

例子(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   

結果:

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

***個Select子句被稱為錨點語句,它返回的結果跟普通的SQL沒有區別,在這里返回MgrID為null的員工。

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

DirectReport0 是Employee和錨點結合的產物;

DirectReport1 是Employee和 DirectReport0 結合的產物;

依次類推, DirectReport n是Employee和DirectReport n-1結合的產物;

當DirectReport_n為空的時候,這個過程就結束了。

*** 錨點和DirectReport0,DirectReport1... 的并集就是DirectReport的內容。

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

可見SQL Server CTEs可以用來遞歸操作樹形結構的數據表。

【編輯推薦】

  1. SQL Server浮點數據類型的詳細解析
  2. 卸載SQL Server 2005組件的正確順序
  3. SQL Server 2000刪除實戰演習
  4. SQL Server存儲過程的命名標準如何進行?
  5.  Server數據庫的臨時表的正確操作步驟
責任編輯:佚名 來源: 人民郵電出版社
相關推薦

2010-10-19 14:45:01

SQL SERVER臨

2010-11-11 17:20:51

SQL Server創

2010-09-27 10:59:23

SQL SERVER事

2010-11-09 10:10:08

SQL Server

2011-02-28 17:41:20

SQL Server

2010-11-11 10:18:59

select into

2010-07-12 10:34:58

SQL Server視

2010-07-19 13:22:45

SQL Server

2010-07-05 13:19:36

2010-04-09 10:43:34

Oracle SQL

2009-03-23 09:11:36

SQL Server自SQL Server自SQL Server數

2010-07-08 15:40:28

SQL Server嵌

2010-07-20 09:15:03

SQL Server

2011-09-07 10:24:01

SQL Server鏡像

2010-07-09 15:39:29

SQL server

2010-07-19 14:24:15

SQL Server盤

2010-05-07 16:32:33

Media Serve緩存

2010-07-07 13:58:25

SQL Server死

2010-12-23 09:25:20

SQL Server

2010-07-14 13:21:19

SQL Server
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 福利视频一区二区三区 | 国产片侵犯亲女视频播放 | 久久久久久亚洲国产精品 | 国产不卡一区在线观看 | 久国产视频 | 亚洲成人动漫在线观看 | 韩日在线观看视频 | 中文字幕亚洲国产 | 国产一区二区小视频 | 在线成人一区 | 夜夜操av| 黄色在线免费观看 | 日韩精品视频在线 | 久久九九色 | 丁香五月缴情综合网 | 国产一区二区三区欧美 | 精品国产久 | 一区二区三区视频 | 午夜影院操 | 国产在线精品区 | a级在线免费观看 | 国产高清一区二区 | 国产精品资源在线 | 亚洲一区二区国产 | 日韩精品亚洲专区在线观看 | 中文字幕成人网 | 久久高清精品 | 国产精品一区二区在线 | 国产午夜精品福利 | 国产精品一区二区在线 | 又黄又爽的网站 | 久久不射网 | 亚洲欧美在线视频 | 精品国产视频在线观看 | 麻豆久久久 | 亚洲精品视频在线观看视频 | 国产日韩欧美一区二区在线播放 | 不卡一区二区三区四区 | 日韩三级电影一区二区 | 亚洲综合色丁香婷婷六月图片 | 久久精品小视频 |