精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SQL Server 2005/2008中的CTE應用之遞歸查詢

數據庫 SQL Server
本文我們主要介紹了SQL Server 2005/2008中的CTE應用之遞歸查詢的相關知識,并通過實際的例子進行了說明,希望能夠對您有所收獲!

SQL Server 2005/2008中的CTE應用之遞歸查詢是本文我們主要要介紹的內容,接下來我們首先介紹一下MSDN中關于CTE的相關知識,然后通過實際的例子進行說明,希望能夠對您有所幫助。

按照MSDN介紹

1、公用表表達式 (CTE) 可以認為是在單個 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 語句的執行范圍內定義的臨時結果集。CTE 與派生表類似,具體表現在不存儲為對象,并且只在查詢期間有效。與派生表的不同之處在于,CTE 可自引用,還可在同一查詢中引用多次。

CTE 可用于:

  • 創建遞歸查詢。有關詳細信息,請參閱使用公用表表達式的遞歸查詢。
  • 在不需要常規使用視圖時替換視圖,也就是說,不必將定義存儲在元數據中。
  • 啟用按從標量嵌套 select 語句派生的列進行分組,或者按不確定性函數或有外部訪問的函數進行分組。
  • 在同一語句中多次引用生成的表。

使用CTE 可以獲得提高可讀性和輕松維護復雜查詢的優點。查詢可以分為單獨塊、簡單塊、邏輯生成塊。之后,這些簡單塊可用于生成更復雜的臨時 CTE,直到生成最終結果集。可以在用戶定義的例程(如函數、存儲過程、觸發器或視圖)中定義 CTE。

2、公用表表達式 (CTE) 具有一個重要的優點,那就是能夠引用其自身,從而創建遞歸 CTE。遞歸 CTE 是一個重復執行初始 CTE 以返回數據子集直到獲取完整結果集的公用表表達式。當某個查詢引用遞歸 CTE 時,它即被稱為遞歸查詢。遞歸查詢通常用于返回分層數據,例如:顯示某個組織圖中的雇員或物料清單方案(其中父級產品有一個或多個組件,而那些組件可能還有子組件,或者是其他父級產品的組件)中的數據。

遞歸CTE可以極大地簡化在 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 語句中運行遞歸查詢所需的代碼。在 SQL Server 的早期版本中,遞歸查詢通常需要使用臨時表、游標和邏輯來控制遞歸步驟流。有關公用表表達式的詳細信息,請參閱使用公用表表達式。

為了描述方便,邀月特地列舉了一個常見的自關聯Table。

表結構如下:

表結構:

  1. CREATE TABLE [dbo].[CategorySelf](  
  2.     [PKID] [int] IDENTITY(1,1) NOT NULL,  
  3.     [C_Name] [nvarchar](50) NOT NULL,  
  4.     [C_Level] [int] NOT NULL,  
  5.     [C_Code] [nvarchar](255) NULL,  
  6.     [C_Parent] [int] NOT NULL,  
  7.     [InsertTime] [datetime] NOT NULL,  
  8.     [InsertUser] [nvarchar](50) NULL,  
  9.     [UpdateTime] [datetime] NOT NULL,  
  10.     [UpdateUser] [nvarchar](50) NULL,  
  11.     [SortLevel] [int] NOT NULL,  
  12.     [CurrState] [smallint] NOT NULL,  
  13.     [F1] [int] NOT NULL,  
  14.     [F2] [nvarchar](255) NULL  
  15.  
  16.  CONSTRAINT [PK_OBJECTCATEGORYSELF] PRIMARY KEY CLUSTERED   
  17. (  
  18.     [PKID] ASC  
  19. )WITH (PAD_INDEX  = OFFSTATISTICS_NORECOMPUTE  = OFFIGNORE_DUP_KEY = OFFALLOW_ROW_LOCKS  = ONALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]  
  20. ) ON [PRIMARY]  
  21.  
  22. GO 

 

再插入一些測試數據:

  1. Insert  
  2. INSERT INTO [CategorySelf]([C_Name],[C_Level] ,[C_Code],[C_Parent] ,[InsertTime] ,[InsertUser] ,[UpdateTime]  ,[UpdateUser]  ,[SortLevel]  ,[CurrState]  ,[F1]  ,[F2])  
  3. select '分類1',1,'0',0,GETDATE(),'testUser',DATEADD(dd,1,getdate()),'CrackUser',13,0,1,'邀月備注' union all  
  4. select '分類2',1,'0',0,GETDATE(),'testUser',DATEADD(dd,78,getdate()),'CrackUser',12,0,1,'邀月備注' union all  
  5. select '分類3',1,'0',0,GETDATE(),'testUser',DATEADD(dd,6,getdate()),'CrackUser',10,0,1,'邀月備注' union all  
  6. select '分類4',2,'1',1,GETDATE(),'testUser',DATEADD(dd,75,getdate()),'CrackUser',19,0,1,'邀月備注' union all  
  7. select '分類5',2,'2',2,GETDATE(),'testUser',DATEADD(dd,3,getdate()),'CrackUser',17,0,1,'邀月備注' union all  
  8. select '分類6',3,'1/4',4,GETDATE(),'testUser',DATEADD(dd,4,getdate()),'CrackUser',16,0,1,'邀月備注' union all  
  9. select '分類7',3,'1/4',4,GETDATE(),'testUser',DATEADD(dd,5,getdate()),'CrackUser',4,0,1,'邀月備注' union all  
  10. select '分類8',3,'2/5',5,GETDATE(),'testUser',DATEADD(dd,6,getdate()),'CrackUser',3,0,1,'邀月備注' union all  
  11. select '分類9',4,'1/4/6',6,GETDATE(),'testUser',DATEADD(dd,7,getdate()),'CrackUser',5,0,1,'邀月備注' union all  
  12. select '分類10',4,'1/4/6',6,GETDATE(),'testUser',DATEADD(dd,7,getdate()),'CrackUser',63,0,1,'邀月備注' union all  
  13. select '分類11',4,'1/4/6',6,GETDATE(),'testUser',DATEADD(dd,8,getdate()),'CrackUser',83,0,1,'邀月備注' union all  
  14. select '分類12',4,'2/5/8',8,GETDATE(),'testUser',DATEADD(dd,10,getdate()),'CrackUser',3,0,1,'邀月備注' union all  
  15. select '分類13',4,'2/5/8',8,GETDATE(),'testUser',DATEADD(dd,15,getdate()),'CrackUser',1,0,1,'邀月備注'  

 

一個典型的應用場景是:在這個自關聯的表中,查詢以PKID為2的分類包含所有子分類。也許很多情況下,我們不得不用臨時表\表變量\游標等。現在我們有了CTE,就簡單多了。

  1. CTEDemo1  
  2. WITH SimpleRecursive(C_Name, PKID, C_Code,C_Parent)   
  3.     AS  
  4. (SELECT C_Name, PKID, C_Code,C_Parent  FROM CategorySelf WHERE PKID = 2 
  5. UNION ALL  
  6. SELECT p.C_Name, p.PKID, p.C_Code,p.C_parent  
  7.  FROM CategorySelf  P  INNER JOIN  
  8.  SimpleRecursive A ON A.PKID = P.C_Parent  
  9. )  
  10. SELECT sr.C_Name as C_Name, c.C_Name as C_ParentName,sr.C_Code as C_ParentCode  
  11. FROM SimpleRecursive sr inner join CategorySelf c  
  12. on sr.C_Parent=c.PKID 

 

查詢結果如下:

 

  1. C_Name    C_ParentName    C_ParentCode  
  2. 分類5    分類2    2  
  3. 分類8    分類5    2/5  
  4. 分類12    分類8    2/5/8  
  5. 分類13    分類8    2/5/8 

 

感覺怎么樣?如果我只想查詢第二層,而不是默認的無限查詢下去,可以在上面的SQL后加一個選項 Option(MAXRECURSION 5),注意5表示到第5層就不往下找了。如果只想找第二層,但實際結果有三層,此時會出錯:Msg 530, Level 16, State 1, Line 1.The statement terminated. The maximum recursion 1 has been exhausted before statement completion.

此時可以通過where條件來解決,而保證不出錯,看如下SQL語句:

  1. CTEDemo2  
  2. WITH SimpleRecursive(C_Name, PKID, C_Code,C_Parent,Sublevel)   
  3.     AS  
  4. (SELECT C_Name, PKID, C_Code,C_Parent,0  FROM CategorySelf WHERE PKID = 2 
  5. UNION ALL  
  6. SELECT p.C_Name, p.PKID, p.C_Code,p.C_parent,Sublevel+1  
  7.  FROM CategorySelf  P  INNER JOIN  
  8.  SimpleRecursive A ON A.PKID = P.C_Parent  
  9. )  
  10. SELECT sr.C_Name as C_Name, c.C_Name as C_ParentName,sr.C_Code as C_ParentCode  
  11. FROM SimpleRecursive sr inner join CategorySelf c  
  12. on sr.C_Parent=c.PKID  
  13. where SubLevel<=2 

 

查詢結果:

  1. C_Name    C_ParentName    C_ParentCode  
  2. 分類5    分類2    2  
  3. 分類8    分類5    2/5  

 

當然,我們不是說CTE就是***的。通過好的表設計也可以某種程度上解決特定的問題。下面用常規的SQL實現上面這個需求。注意:上面表中有一個字段很重要,就是C_Code,編碼 ,格式如"1/2",“2/5/8"表示該分類的上級分類是1/2,2/5/8,這樣,我們查詢就簡單多,查詢以PKID為2的分類包含所有子分類:

  1. SELECT C_Name as C_Name,   
  2. (Select top 1 C_Name from CategorySelf s where c.C_Parent=s.PKID) as C_ParentName,  
  3. C_Code as C_ParentCode  
  4. from CategorySelf c where C_Code like '2/%' 

 

查詢以PKID為2的分類包含所有子分類,且級別不大于3

  1. SELECT C_Name as C_Name,   
  2. (Select top 1 C_Name from CategorySelf s where c.C_Parent=s.PKID) as C_ParentName,  
  3. C_Code as C_ParentCode  
  4. from CategorySelf c where C_Code like '2/%' and C_Level<=3 

 

查詢結果同上,略去。這里我們看出,有時候,好的表結構設計相當重要。

關于SQL Server 2005/2008中的CTE應用之遞歸查詢的相關知識就介紹到這里了,希望本次的介紹能夠對您有所收獲!

【編輯推薦】

  1. SQL Server多表查詢優化方案總結
  2. SQL Server數據庫ISNULL函數的應用實例
  3. SQL Server數據庫DATEPART的語法及使用實例
  4. SQL Server根據子節點查詢所有父節點的代碼示例
  5. SQL Server臟讀方式數據提取之NOLOCK和READPAST

 

責任編輯:趙鵬 來源: 博客園
相關推薦

2010-10-11 09:05:40

SQL Server

2011-03-11 10:35:31

SQL鎖定SQL Server

2011-02-28 13:19:50

SQL Server SQL死鎖

2011-03-11 13:26:32

SQL ServerBlocking阻塞

2011-08-19 14:03:36

SQL Server 檢索集合

2011-08-19 13:46:22

SQL Server 組裝有序集合

2011-09-01 13:24:42

SQL Server 呈現GeoRSS訂閱的Bing Maps

2011-08-01 09:09:07

SQL Server SQL Server 數據庫

2009-05-18 18:20:14

虛擬化Hyper-VWindows ser

2023-08-29 09:46:12

SQLCTE遞歸

2009-04-16 18:15:19

動作審核審核活動SQL Server

2009-04-16 17:44:31

2011-02-18 17:31:18

SQL Server

2011-09-07 15:11:31

SQL Server同步

2010-10-21 15:13:20

SQL Server系

2010-07-12 17:37:03

SQL Server

2010-07-13 16:48:14

SQL Server

2011-04-02 16:20:21

SQL SERVER 同步復制

2011-09-01 16:13:37

Visual StudSQL Server 存儲過程

2009-03-17 13:25:13

查詢遷移SQL Server
點贊
收藏

51CTO技術棧公眾號

日本久久一区二区| 久久精品欧美一区二区三区麻豆| 精品国产一区二区三区在线观看 | 蜜臀av午夜精品久久| 欧美1区2区3| 精品国产精品自拍| 亚洲视频导航| 亚洲成人第一区| 毛片一区二区| 久久91亚洲人成电影网站 | 国产精品天天操| 亚洲精品日韩久久| 深夜福利一区二区| av无码一区二区三区| 日本电影久久久| 欧美性猛交xxxx富婆弯腰| 成人手机视频在线| 欧美孕妇孕交xxⅹ孕妇交| 久久精品国产亚洲高清剧情介绍 | 中文字幕在线欧美| 欧美成人tv| 亚洲欧洲偷拍精品| 99免费观看视频| 久久精品国产精品亚洲毛片| 午夜天堂影视香蕉久久| 欧美性视频在线播放| 久久久pmvav| 成人三级伦理片| 国产在线视频不卡| 日韩精品一卡二卡| 亚洲有吗中文字幕| 在线观看亚洲视频| 国产精品一区二区入口九绯色| 精品视频成人| 欧美精品xxxxbbbb| 日本爱爱免费视频| 久久爱91午夜羞羞| 精品免费在线观看| 精品国偷自产一区二区三区| 免费av在线网址| 中文在线一区二区| 日韩理论片在线观看| 无码国产色欲xxxx视频 | 国产美女免费网站| 亚洲另类春色校园小说| 欧美精品一区二区三区蜜桃| 在线观看av免费观看| 久久久加勒比| 欧美日韩一区不卡| www.亚洲高清| av亚洲一区| 欧美撒尿777hd撒尿| 久久精品香蕉视频| 日韩一区二区三区在线免费观看 | 亚洲精品免费在线观看视频| 久久电影国产免费久久电影 | 亚洲午夜精品| 日韩一卡二卡三卡国产欧美| 性生活在线视频| 日韩三级精品| 欧美成人艳星乳罩| 日本在线不卡一区二区| 精品国内亚洲2022精品成人| 亚洲国产精品电影| av网站免费在线播放| 亚洲区小说区图片区qvod按摩| 国产丝袜高跟一区| 91成人破解版| 久久一区91| 九色精品免费永久在线| 国产亚洲第一页| 国产精品久久久亚洲一区| 欧洲精品在线视频| 丰满熟女人妻一区二区三| 久久精品国产精品亚洲综合| 亚洲一区二区中文字幕| 黑人精品一区二区| 久久久久99精品国产片| 一道精品一区二区三区| 七七久久电影网| 欧美日韩国产综合新一区| 北条麻妃视频在线| 高清在线一区二区| 亚洲高清久久久久久| 在线观看日本中文字幕| 亚洲一区二区日韩| 欧美做爰性生交视频| ,亚洲人成毛片在线播放| 国产精品538一区二区在线| 国产亚洲二区| 性开放的欧美大片| 亚洲亚洲人成综合网络| 老司机午夜av| 综合中文字幕| 在线看日韩欧美| 精品视频在线观看免费| 日本美女一区二区| www.久久草| 户外极限露出调教在线视频| 亚洲三级在线看| 国产成人精品视频免费看| 日日夜夜精品| 日韩av一区二区在线| 99热在线观看精品| 国产一区白浆| 亚洲综合一区二区不卡| 酒色婷婷桃色成人免费av网| 亚洲在线视频一区| 一道本视频在线观看| 久久精品66| 久久久国产视频| 免费无码国产精品| 成人免费毛片高清视频| 中文字幕中文字幕一区三区| 中文字幕在线免费观看视频| 日韩你懂的在线观看| 黄色三级生活片| 亚洲在线免费| 国产精品国产一区二区| 日本中文字幕视频在线| 日本国产一区二区| 日本黄色录像片| 最新国产精品| 成人福利免费观看| 第一页在线观看| 欧美视频一区二区三区…| 亚洲午夜精品在线观看| 97精品国产| 国产精品美女无圣光视频| 日本高清中文字幕二区在线| 亚洲精品亚洲人成人网在线播放| xx欧美撒尿嘘撒尿xx| 国产精品一区2区3区| 午夜精品视频在线| 亚洲女人18毛片水真多| 亚洲精品国产a| 免费黄频在线观看| 久久在线视频免费观看| 国产美女精彩久久| 8888四色奇米在线观看| 欧美丝袜丝nylons| 波多野结衣一二三四区| 日韩影院精彩在线| 欧洲精品亚洲精品| 最近高清中文在线字幕在线观看1| 亚洲白虎美女被爆操| 国产午夜免费视频| 成人小视频在线观看| 免费特级黄色片| 久久悠悠精品综合网| 国产做受高潮69| 少妇精品视频一区二区| 精品福利樱桃av导航| 超碰男人的天堂| 亚洲制服av| 欧日韩一区二区三区| 国产精品4hu.www| 久久精品国产v日韩v亚洲| 国产又大又黄的视频| 亚洲免费电影在线| 免费黄色av网址| 亚洲激情专区| 欧美一区二区三区精美影视| 高清av一区二区三区| 色七七影院综合| 国产精品爽爽久久| 亚洲午夜久久久久久久久电影院 | 国产高清在线免费| 一区二区三区成人| 亚洲一区二区在线免费| 亚洲在线日韩| 日本福利视频导航| 中文字幕av一区二区三区四区| 久久久综合av| 男人天堂综合| 7777女厕盗摄久久久| 青草草在线视频| 91一区二区三区在线观看| www日韩在线观看| 香港欧美日韩三级黄色一级电影网站| 亚洲va码欧洲m码| 2021天堂中文幕一二区在线观| 日韩电影在线观看中文字幕 | 中文字幕国产日韩| 国内老熟妇对白hdxxxx| 黑丝美女久久久| 91在线无精精品白丝| 国产一区二区免费视频| 日韩av三级在线| 91亚洲国产成人久久精品| 国产高清自拍一区| 国产精品蜜月aⅴ在线| 欧美肥婆姓交大片| fc2在线中文字幕| 日韩美女在线视频| 欧美视频xxxx| 亚洲午夜视频在线观看| 嘿嘿视频在线观看| 成人午夜免费视频| 久久国产激情视频| 国产模特精品视频久久久久| 日本黄色播放器| 蜜桃一区二区| 99在线看视频| 久久精品国产福利| 欧美一级视频一区二区| 菠萝蜜视频国产在线播放| 日韩精品欧美国产精品忘忧草| 亚洲天堂中文在线| 天天做天天摸天天爽国产一区 | 亚洲成av人在线观看| 战狼4完整免费观看在线播放版| 成人高清视频免费观看| 国产美女视频免费看| 久久国产99| 男人的天堂狠狠干| 亚洲精品久久久| 亚洲成人av动漫| 亚洲人和日本人hd| 成人免费看片网站| 亚洲高清国产拍精品26u| 国产激情999| 特黄毛片在线观看| 久久人人97超碰精品888| 超碰电影在线播放| 久久精品视频一| 成人在线免费观看| 亚洲欧美一区二区三区四区| 欧美 日韩 国产 在线| 日韩三级在线观看| 99视频国产精品免费观看a| 欧美日韩精品综合在线| 波多野结衣绝顶大高潮| wwww在线观看免费视频| 日韩丝袜情趣美女图片| 国产一区二区三区在线观看| 欧美亚洲国产一区二区三区va| 国产成人在线视频观看| 亚洲国产一区在线观看| 九九热精彩视频| 伊人一区二区三区| 日韩欧美中文字幕视频| 亚洲欧美日韩成人高清在线一区| 成人欧美一区二区三区黑人一| 欧美国产综合一区二区| 在线视频第一页| 日本一区二区三区视频视频| 国产三级av在线播放| 日本一区二区三区免费乱视频| 国产精品国产三级国产专业不 | 久久久久久久久久97| 国产精品视频一二| 美国精品一区二区| 中文字幕一区在线观看视频| 婷婷国产成人精品视频| 亚洲三级电影全部在线观看高清| 天堂网avav| 亚洲一区二区黄色| 日本免费观看视| 欧美日韩中文字幕在线| 波多野结衣黄色| 欧美久久久影院| 精品人妻一区二区三区三区四区| 日韩欧美高清一区| 天天干,天天操,天天射| 精品小视频在线| 成人在线免费电影| 久久久国产精彩视频美女艺术照福利| av网站大全在线| 久久久久久久久久久免费| 免费在线小视频| 国产成人精品日本亚洲专区61| 91精品美女| 91精品国产高清久久久久久91裸体| 日本伊人久久| 国产一区二区三区三区在线观看| 四虎国产成人精品免费一女五男| 国产精品久久久久三级| 欧美三根一起进三p| 天涯成人国产亚洲精品一区av| 欧美一区免费看| 日韩一卡二卡三卡四卡| 免费看男男www网站入口在线| 亚洲一二三在线| 日韩av激情| 日本久久精品视频| 国产麻豆一区二区三区| 久久久久久a亚洲欧洲aⅴ| 成人羞羞网站入口| www.日本少妇| 六月丁香婷婷久久| 东京热av一区| 国产精品美女久久久久aⅴ| 欧美日韩一级大片| 在线观看免费成人| 亚洲精品中文字幕成人片| 亚洲欧美制服中文字幕| 午夜伦理大片视频在线观看| 日韩av色综合| 综合视频一区| 在线观看欧美一区| 免费亚洲网站| 丰满人妻一区二区三区大胸| 国产欧美一区二区精品久导航 | 日韩伦理在线免费观看| 免费在线观看一区二区三区| 无码国产69精品久久久久网站| 国产丝袜在线精品| 日韩精品国产一区二区| 91麻豆精品国产91久久久 | 精品久久久久久无码国产| 国产激情一区二区三区| 手机av在线不卡| 大桥未久av一区二区三区| av网站在线观看免费| 国产午夜精品免费一区二区三区| 91破解版在线观看| 亚洲aaa激情| 久久综合国产| 北条麻妃在线视频| 26uuu精品一区二区在线观看| 久久久精品99| 欧美一区二区黄| 91精品专区| 国产精品久久久久久久久久久久久 | 7777奇米亚洲综合久久| 成人在线视频免费观看| 欧美精品色婷婷五月综合| 成人毛片视频在线观看| 欧美在线视频第一页| 欧美色爱综合网| 成人网视频在线观看| 538国产精品一区二区在线| 18国产精品| 女人床在线观看| 国产一区二区三区av电影| 日韩在线一卡二卡| 欧美日韩精品高清| 在线观看免费网站黄| 国产精品第100页| 日韩中文av| 欧美a在线视频| 99久久免费精品| 国偷自拍第113页| 日韩精品视频在线观看网址| 国产伦子伦对白在线播放观看| 精品国产免费久久久久久尖叫 | 97av在线影院| 久久香蕉精品香蕉| 男女激情无遮挡| 91丨porny丨户外露出| av大片免费观看| 日韩精品高清视频| 中文字幕 在线观看| 日韩电影在线播放| 蜜臀av性久久久久蜜臀av麻豆| 欧美另类69xxxx| 777午夜精品免费视频| 伊人影院在线视频| 国产精品视频免费一区二区三区| 亚洲毛片在线| 欧美色图亚洲激情| 欧美视频一区在线| 1区2区3区在线视频| 国产女主播一区二区| 野花国产精品入口| 男女做爰猛烈刺激| 8v天堂国产在线一区二区| 羞羞视频在线观看免费| 国严精品久久久久久亚洲影视 | 国产精品成人播放| 国产精品久久久久久久久久10秀 | 久久69精品久久久久久国产越南| 国产精品白浆| 国产情侣av自拍| 一区二区三区在线影院| 亚洲 国产 欧美 日韩| 国产精品精品一区二区三区午夜版| 国产精品99一区二区三| 无码人妻一区二区三区在线视频| 亚洲国产精品久久久久秋霞影院| 色视频精品视频在线观看| 国产欧美精品日韩| 国产精品www994| 日本一级免费视频| 日韩欧美一级二级三级久久久| 漫画在线观看av| 亚洲一区三区电影在线观看| 岛国精品一区二区| 久久久久久久久久久久久av| 久久精品国产综合| 欧美久久精品| 手机av在线网| 精品日本高清在线播放| 国产福利在线播放麻豆| 久久久99爱| 国产老肥熟一区二区三区| 你懂的国产在线| 日本欧美韩国一区三区| 中文字幕中文字幕99|