非遞迴演算法/儲存過程版/GUID主鍵完整資料庫示例_插入記錄
-- ========================================
-- Author:
-- Description:
-- Return : 成功返回0,重名返回1
-- ========================================
Create PROCEDURE [dbo].[up_Class_InsertEx]
@newId uniqueidentifier, --新記錄Id
@classType nvarchar(50), --型別(比如:產品,新聞,地區)
@parentId uniqueidentifier, --父類Id
@className nvarchar(50), --分類名稱
@classReadMe nvarchar(200) --分類說明
AS
BEGIN
SET NOCOUNT ON;
Declare @RootID int; --根ID(頂級分類的RootID)
DeClare @ParentName nvarchar(500); --父類名稱
Declare @Depth int; --父類深度
Declare @MaxOrders int; --同級最大排序號
Declare @ParentIdStr nvarchar(500); --父類Id全路徑
Declare @ParentNameStr nvarchar(500); --父類名稱全路徑
--如果是頂級類
if @parentId='00000000-0000-0000-0000-000000000000'
begin
if not exists(select F_id From T_Class where F_ClassName=@className and F_type=@ClassType and F_parentid='00000000-0000-0000-0000-000000000000')
begin
set @RootID = 0
if exists(select F_id From T_Class Where F_type=@ClassType and F_parentid='00000000-0000-0000-0000-000000000000')
begin
select @RootId = max(F_RootID) From T_Class Where F_type=@ClassType and F_parentid='00000000-0000-0000-0000-000000000000';--得到當前頂級分類的最大RootId
end
insert into T_Class(
F_Id,
F_Type,
F_parentId,
F_className,
F_ReadMe,
F_parentIdstr,
F_parentNameStr,
F_RootId,
F_orders)
values(
@newId,
@classType,
'00000000-0000-0000-0000-000000000000',
@className,
@classReadMe,
'00000000-0000-0000-0000-000000000000',
'00000000-0000-0000-0000-000000000000',
@rootId+1,
0)
return 0;--頂級分類成功插入
end
else
return 1;--頂級分類已經存在
end
--如果不是頂級類
if @parentId'00000000-0000-0000-0000-000000000000'
begin
--檢查父類ID的合法性
if exists(select F_id From T_Class Where F_id=@parentID)
begin
--檢查該節點是否已經存在
if not exists(select F_id From T_Class where F_ClassName=@className and F_type=@ClassType and F_parentid=@parentId)
begin
select @rootId=F_RootId,@ParentName=F_ClassName,@Depth=F_Depth,@parentIdStr=F_parentIdStr,@parentNameStr=F_parentNameStr From T_Class Where F_Id = @ParentId;
set @maxOrders = 0
--如果父類無子類
if not exists(select F_id From T_Class where F_ParentIdStr like '%' + Convert(Nvarchar(50),@parentId) + '%')
select @maxOrders = F_orders From T_Class where F_id=@parentId
else
select @maxOrders = Max(F_orders) From T_Class where F_ParentIdStr like '%' + Convert(Nvarchar(50),@parentId) + '%'
insert into T_Class(
F_ID,
F_Type,
F_parentId,
F_className,
F_ReadMe,
F_parentIdstr,
F_parentNameStr,
F_Orders,
F_Depth,
F_RootId
)
values(
@newId,
@classType,
@parentId,
@className,
@classReadMe,
@parentIdStr + ',' + convert(nvarchar(50),@parentID),
@parentNameStr + ',' + @parentName,
@maxOrders + 1,
@depth + 1,
@rootId
)
update T_class set F_orders = F_orders + 1 where (F_orders > @maxOrders) And (F_RootId=@RootId) And F_ID@NewId
return 0;
end
else
return 1;
end
end
END
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2894/viewspace-2801020/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫儲存過程資料庫儲存過程
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- Java MyBatis 插入資料庫返回主鍵JavaMyBatis資料庫
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- 頭歌資料庫實驗六:儲存過程資料庫儲存過程
- sqlserver資料庫還原儲存過程指令碼SQLServer資料庫儲存過程指令碼
- 資料庫主鍵、從鍵(易懂版)資料庫
- 金倉資料庫KingbaseES儲存過程 RETURN語句資料庫儲存過程
- 儲存過程迴光返照?SQLite邏輯和資料合併儲存過程SQLite
- 通過EFCore呼叫GBase8s資料庫儲存過程資料庫儲存過程
- 【Java資料結構與演算法筆記(二)】樹的四種遍歷方式(遞迴&非遞迴)Java資料結構演算法筆記遞迴
- mybatis oracle資料庫批次插入資料,忽略主鍵重複MyBatisOracle資料庫
- 【SqlServer】清除過期資料的儲存過程SQLServer儲存過程
- 【故障公告】1個儲存過程拖垮整個資料庫儲存過程資料庫
- MySQL 更改資料庫資料儲存目錄MySql資料庫
- 儲存過程_造使用者資料儲存過程
- MySQL的寫入資料儲存過程MySql儲存過程
- 快速排序(遞迴及非遞迴演算法原始碼)排序遞迴演算法原始碼
- 恢復MySQL資料庫建立儲存過程是遇到錯誤MySql資料庫儲存過程
- 使用JavaScript和Python實現Oracle資料庫的儲存過程?JavaScriptPythonOracle資料庫儲存過程
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- 資料庫擴充套件表設計過程記錄資料庫套件
- MYSQL儲存過程-練習3 repeat迴圈MySql儲存過程
- MYSQL儲存過程-練習4 loop迴圈MySql儲存過程OOP
- 資料儲存-領存高速海量資料記錄儲存模組產品介紹
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- Mysql使用儲存過程快速新增百萬資料MySql儲存過程
- 查詢當前資料庫存在某個字串的儲存過程資料庫字串儲存過程
- 淺談mysql資料庫技術,輕鬆玩轉儲存過程MySql資料庫儲存過程
- Ubuntu 上更改 MySQL 資料庫資料儲存目錄UbuntuMySql資料庫
- 快速排序【遞迴】【非遞迴】排序遞迴
- Mybatis:插入資料返回自增主鍵MyBatis
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 資料結構:歸併排序(非遞迴)資料結構排序遞迴
- ibatis呼叫oracle儲存過程(極簡版)BATOracle儲存過程
- MySQL儲存過程in、out、inout引數示例與總結MySql儲存過程