非遞迴演算法/儲存過程版/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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 批量插入資料的儲存過程儲存過程
- 資料庫設計:儲存過程主體資料庫儲存過程
- 遞迴儲存過程中使用cursor遞迴儲存過程
- 資料庫儲存過程資料庫儲存過程
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- oracle 匿名儲存過程插入大量測試資料Oracle儲存過程
- SQL儲存過程示例SQL儲存過程
- ORACLE 儲存過程示例Oracle儲存過程
- 資料庫設計:儲存過程資料庫儲存過程
- Mysql利用儲存過程插入500W條資料MySql儲存過程
- MySql 儲存過程 臨時表 無法插入資料MySql儲存過程
- MyBatis 示例之儲存過程MyBatis儲存過程
- 儲存過程呼叫不同資料庫的資料儲存過程資料庫
- 資料庫許可權-儲存過程資料庫儲存過程
- SQL儲存過程迴圈SQL儲存過程
- Java MyBatis 插入資料庫返回主鍵JavaMyBatis資料庫
- 淺談資料庫中的儲存過程資料庫儲存過程
- Mysql 資料庫水平分表 儲存過程MySql資料庫儲存過程
- 資料庫開發---常用物件-儲存過程資料庫物件儲存過程
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- sqlserver資料庫還原儲存過程指令碼SQLServer資料庫儲存過程指令碼
- 頭歌資料庫實驗六:儲存過程資料庫儲存過程
- 資料庫主鍵、從鍵(易懂版)資料庫
- JDBC 呼叫儲存過程程式碼示例JDBC儲存過程
- oracle動態sql儲存過程示例OracleSQL儲存過程
- Oracle遷移資料庫過程記錄Oracle資料庫
- 儲存過程返回資料集儲存過程
- 儲存過程在主從庫上的測試儲存過程
- 【資料結構】——搜尋二叉樹的插入,查詢和刪除(遞迴&非遞迴)資料結構二叉樹遞迴
- 獲取不同資料庫新增記錄主鍵值資料庫
- 【Java資料結構與演算法筆記(二)】樹的四種遍歷方式(遞迴&非遞迴)Java資料結構演算法筆記遞迴
- 自動生成對錶進行插入和更新的儲存過程的儲存過程 (轉)儲存過程
- mybatis oracle資料庫批次插入資料,忽略主鍵重複MyBatisOracle資料庫
- 快速排序(遞迴及非遞迴演算法原始碼)排序遞迴演算法原始碼
- 【SqlServer】清除過期資料的儲存過程SQLServer儲存過程
- 遞迴演算法轉換為非遞迴演算法的技巧遞迴演算法
- MySQL 更改資料庫資料儲存目錄MySql資料庫