亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

一道關于數據庫(經典父子級 ID 關聯)更新題

2024-08-31 01:02:57
字體:
來源:轉載
供稿:網友

昨天,一同事發過來的一道數據庫題目,就是哪種經典的父子級 ID 在同一數據庫表中設計類型。需要在原表中添加一個字段,同時,將該節點的父子級詳細信息插入到原表新增的一字段中,具體效果如下圖。

AreaCode 、AreaName、ParentCode (原表三字段). Content __新增字段,更新該 AreaCode 下所有父級菜單信息至新增至原表的 Content 字段下面,用紅線框起來(意思應該講明白了吧.)

AreaCode:地區 ID AreaName:地區介紹 ParentCode:父級 AreaCode (Content---將該 AreaCode 下的所有父級 AreaName 拼成 類似:越城區,紹興市,浙江省 字符串插入)

更新前:

一道關于數據庫(經典父子級 ID 關聯)更新題

更新后:

一道關于數據庫(經典父子級 ID 關聯)更新題

在項目中,相對于此種內容,一般會存儲在內存中,作為緩存使用,避免頻繁連接數據庫,帶來的性能問題。

       代碼就不上了,簡單的遞歸即可實現。

1 先從數據庫將該表所有內容取出來,緩存起來。(該表差不多 3000 左右條數據)
2 再寫個遞歸函數,根據每次傳入的 AreaCode(第一步已緩存數據庫取出來的整表集合 可轉成 Dictionary<int,AreaRegion> 類型),獲取其 ParentCode 值,只要 ParentCode 不為 0(即不為頂級結點,ParentCode 為頂級結點),那么,繼續調用該函數,傳入本次查詢實體的 ParentCode 信息。
3  在代碼很方便查出父結點所有信息,再 Update 至數據庫即可。

  感謝 清海揚波  grayboy 完全可以通過公用表表達式完成

Code 如下:

with cte(areacode,areaName,content) as(--- 查詢 ParentCode 為 0 (ParentCode 為 0 的為頂級菜單)select areacode,areaName,cast(areaName as varchar(50)) AS contentfrom [AreaRegion] where parentcode=0union all-- 再進行遞歸查詢 select a.areacode,a.areaName,cast(a.content+','+b.areaName as varchar(50) AS content 9 from [AreaRegion] a 10 inner join cte b on a.parentcode=b.areacode )select * from cte

--- 樓主當初想法(我想復雜了 SB 了 )

1 樓主,首當其沖想到的是,即采用游標存儲整表記錄。

2 游標每次取得一條記錄的 AreaCode ,再通過該 AreaCode 查出其所有父級表(包括自身)信息,最后,將查詢出的該表某字段拼成字符串,

插入表變量中(兩字段分別為:AreaCode、Content)。

3 最后,將定義的表變量與原表通過 INNER JOIN(表變量中插入了 AreaCode 字段),進行聯表更新。

更新腳本具體如下:

USE JKCRMGO--定義游標DECLARE updateCursor CURSOR SCROLL FORSELECT A.AreaCode FROM DBO.AreaRegion A--打開游標OPEN updateCursor--定義變量 存儲依次獲取游標值DECLARE @aID NVARCHAR(30)=''---定義變量 存儲父結點具體信息DECLARE @pStr NVARCHAR(300)='';--定義表變量 存儲兩字段 AreaCode Content ( Content :為該字段所有父級菜單信息)DECLARE @TempTable TABLE(AreaCode INT PRIMARY KEY,Content NVARCHAR(3000))--首次獲取游標第一個值 插入變量 @AIDFETCH FIRST FROM updateCursor INTO @AIDWHILE(@@FETCH_STATUS=0)BEGIN--PRINT(@AID) ;---通過傳入的 @AID ,查詢其所有父級菜單信息WITH TB AS(---遞歸查詢父子菜單信息 公用表表達式遞歸查詢SELECT A.*,0 AS LEVEL FROM JKCRM.DBO.AreaRegion AWHERE A.AreaCode=@AIDUNION ALLSELECT B.* ,LEVEL+1 AS LEVEL FROM TB A INNER JOIN JKCRM.DBO.AreaRegion BON A.ParentCode=B.AreaCode )---再將查詢的表信息 拼接成字符串 此處 即采用 SELECT 循環查詢SELECT @pStr=@pStr+ CASE WHEN @pStr='' THEN TB.AreaName ELSE ','+TB.AreaName END FROM TB ORDER BY TB.LEVEL ASC -- PRINT(@pSTR) --插入表變量INSERT INTO @TempTable SELECT @aID,@pStr---將此次通過 AreaCode 獲取的該節點 @pStr 置空SET @pStr='' FETCH NEXT FROM updateCursor INTO @AIDEND--SELECT B.AreaCode,B.AreaName,B.ParentCode,A.Content,A.AreaCode--FROM @TempTable A RIGHT JOIN DBO.AreaRegion B ON A.AreaCode=B.AreaCode ORDER BY B.AreaCode---此處 即可進行 UPDATE 更新操作 UPDATE A SET A.Content=B.Content FROM DBO.AreaRegion A INNER JOIN @TempTable B ON A.AreaCode=B.AreaCode--關閉釋放游標CLOSE updateCursorDEALLOCATE updateCursor

原表部分腳本 SQL

/*Navicat SQL Server Data TransferSource Server: SQLSource Server Version : 120000Source Host: .:1433Source Database : JKCRMSource Schema: dboTarget Server Type : SQL ServerTarget Server Version : 120000File Encoding: 65001Date: 2015-06-12 11:20:40*/-- ------------------------------ Table structure for AreaRegion-- ----------------------------DROP TABLE [dbo].[AreaRegion]GOCREATE TABLE [dbo].[AreaRegion] ([AreaCode] varchar(10) NOT NULL ,[AreaName] varchar(50) NULL ,[ParentCode] varchar(10) NULL ,[Content] nvarchar(200) NULL )GO-- ------------------------------ Records of AreaRegion-- ----------------------------INSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'110000', N'北京市', N'0', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'110100', N'東城區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'110200', N'西城區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'110300', N'崇文區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'110400', N'宣武區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'110500', N'朝陽區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'110600', N'豐臺區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'110700', N'石景山區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'110800', N'海淀區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'110900', N'門頭溝區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'111000', N'房山區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'111100', N'通州區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'111200', N'順義區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'111300', N'昌平區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'111400', N'大興區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'111500', N'懷柔區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'111600', N'平谷區', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'111700', N'密云縣', N'110000', null)GOGOINSERT INTO [dbo].[AreaRegion] ([AreaCode], [AreaName], [ParentCode], [Content]) VALUES (N'111800', N'延慶縣', N'110000', null)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久噜噜噜精品国产亚洲综合| 性欧美亚洲xxxx乳在线观看| 中文字幕精品国产| 国产精品久久久av| 欧美性受xxxx黑人猛交| 国产精品日韩在线| 久久久久久久久久国产精品| 黑人巨大精品欧美一区二区免费| 日韩av一区在线观看| 在线播放日韩欧美| 亚洲精品不卡在线| 欧美壮男野外gaytube| 日韩男女性生活视频| 97香蕉超级碰碰久久免费的优势| 91丨九色丨国产在线| 久久精品国产一区| 国自产精品手机在线观看视频| 久久视频中文字幕| 久久久久久这里只有精品| 伊人久久大香线蕉av一区二区| 欧美在线日韩在线| 日韩电影大全免费观看2023年上| 精品久久久久久中文字幕一区奶水| 久久亚洲国产精品成人av秋霞| 亚洲性av网站| 欧美精品一区三区| 久久久噜久噜久久综合| 国产成人黄色av| 国产精品一区二区三区在线播放| 欧美日韩精品在线播放| 黑人与娇小精品av专区| 欧美一级黄色网| 久久夜精品香蕉| 欧美另类极品videosbestfree| 91亚洲精品视频| 亚洲精品小视频在线观看| 国产精品小说在线| 亚洲精品久久视频| 国产日产欧美精品| 欧美激情久久久久| 亚洲国产99精品国自产| 国产精品久久久久免费a∨| 亚洲综合中文字幕在线观看| 国产视频久久久久久久| 成人激情在线观看| 中文字幕久精品免费视频| 91精品国产777在线观看| 国产精品久久久久免费a∨大胸| 91成人国产在线观看| 日韩欧美精品在线观看| 日韩在线视频播放| 日韩久久午夜影院| 国产成人精品电影久久久| 欧美日韩在线影院| 久久精品国产视频| 午夜精品福利视频| 久久精品视频va| 国产日韩在线精品av| 亚洲人成绝费网站色www| 午夜精品久久久久久久久久久久久| 68精品国产免费久久久久久婷婷| 日本久久久久久久| 欧美成人精品一区| 欧美激情国产日韩精品一区18| 久久777国产线看观看精品| 精品女厕一区二区三区| 日韩精品免费在线视频| 亚州av一区二区| 亚洲第一偷拍网| 国产午夜精品理论片a级探花| 国产精品国产自产拍高清av水多| 亚洲第一国产精品| 在线视频国产日韩| 欧美肥婆姓交大片| 国产亚洲精品久久久久久777| 91高清视频免费观看| 最近更新的2019中文字幕| 亚洲精品中文字幕av| 欧美中文在线观看| 国产精品永久在线| 欧美性生交大片免网| 一区二区三区四区视频| 亚洲欧美日韩一区在线| 日韩精品一二三四区| 777午夜精品福利在线观看| 日韩欧美在线观看视频| 国自在线精品视频| 日韩欧美高清在线视频| 国产视频精品自拍| 亚洲欧美在线第一页| 日韩精品极品视频免费观看| 亚洲欧美日本伦理| 亚洲va国产va天堂va久久| 欧美午夜电影在线| 欧美国产日韩一区| 91视频国产高清| 欧美激情精品久久久久久大尺度| 国精产品一区一区三区有限在线| 欧美丰满少妇xxxxx做受| 欧美性理论片在线观看片免费| 午夜精品久久久久久久白皮肤| 欧美日韩不卡合集视频| 91九色视频在线| 国产成人激情小视频| 26uuu另类亚洲欧美日本一| 久久久精品免费视频| 亚洲一区二区久久| 久久免费精品视频| 久久久国产成人精品| 亚洲一区二区三区香蕉| 日韩在线视频免费观看高清中文| 欧美激情亚洲自拍| 亚洲精选在线观看| 国产精品对白刺激| 久久久国产精品免费| 亚洲美女喷白浆| 国产日韩欧美在线播放| 亚洲成人网在线| 精品少妇v888av| 亚洲美女中文字幕| 日韩在线视频观看正片免费网站| 北条麻妃一区二区在线观看| 日韩毛片在线观看| 中文字幕成人精品久久不卡| 国产精品久久久久久久久免费| 2018日韩中文字幕| 欧美国产精品人人做人人爱| 国产69精品久久久久99| 国产欧美精品va在线观看| 欧美成在线观看| 高清在线视频日韩欧美| 国产精品欧美日韩| 久久久99久久精品女同性| 亚洲欧美中文日韩在线| 久久久久久久久91| 欧美一级电影免费在线观看| 久久99久国产精品黄毛片入口| 国产中文日韩欧美| 亚洲精品自拍第一页| 国产国产精品人在线视| 欧美在线一级va免费观看| 亚洲男人第一av网站| 国产精品久久久久久av下载红粉| 91成人精品网站| 亚洲经典中文字幕| 一本色道久久88精品综合| 亚洲xxx自由成熟| 国产精品久久激情| 亚洲人成人99网站| 国产精品免费久久久久影院| 中文字幕日韩视频| 91精品视频专区| 日本精品免费观看| 精品国产欧美一区二区五十路| 97在线视频免费观看| 国产成人精品免高潮费视频| 国产免费亚洲高清| 17婷婷久久www| 国产成人综合精品在线| 欧美精品在线免费观看| 日韩电影大全免费观看2023年上| 97在线看免费观看视频在线观看| 97在线视频国产| 亚洲精品白浆高清久久久久久|