有限层树形数据转换成无限层树形数据的示例存储过程(MS SQL 2K)
2007-05-08 17:21
459 查看
--有限层树形数据转换成无限层树形数据的示例存储过程(MS SQL 2K)
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[P_Tree_Convert]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[P_Tree_Convert]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE P_Tree_Convert AS
--有限层树形数据转换成无限层树形数据的示例存储过程
--结果数据.
CREATE TABLE [dbo].[#TREE_INFO] (
[NODEID] [varchar](10) NULL , --树形数据节点代码
[PARENTID] [varchar] (10) NULL ,--树形数据节点的父节点代码
[NODENAME] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,--节点名称
[ADDRESS] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,--节点的其它信息
[ICON] [int] NULL --节点的图标编号
) ON [PRIMARY]
--获取有限层树形数据节点数据
SELECT * into #
FROM (SELECT DPCODE1 AS node, DPNAME1 AS nodename
FROM ora_CUSTDEPT
WHERE (DPCODE2 = '00') AND (DPCODE3 = '000') AND (DPCODE4 = '000')
UNION ALL
SELECT DPCODE1 + DPCODE2 AS node, DPNAME2 AS nodename
FROM ora_CUSTDEPT
WHERE (DPCODE3 = '000') AND (DPCODE4 = '000') AND (DPCODE2 <> '00')
UNION ALL
SELECT DPCODE1 + DPCODE2 + DPCODE3 AS node,
DPNAME3 AS nodename
FROM ora_CUSTDEPT
WHERE (DPCODE3 <> '000') AND (DPCODE4 = '000') AND (DPCODE2 <> '00')
UNION ALL
SELECT DPCODE1 + DPCODE2 + DPCODE3 + DPCODE4 AS node,
DPNAME4 AS nodename
FROM ora_CUSTDEPT
WHERE (DPCODE3 <> '000') AND (DPCODE4 <> '000') AND (DPCODE2 <> '00'))
tree_node
ORDER BY node
insert into #TREE_INFO(NODEID, PARENTID, NODENAME)
--从有限层树形数据节点数据获取其父节点数据,后插入结果表
SELECT node, CASE WHEN len(ltrim(rtrim(node))) = 2 THEN '0' WHEN len(node)
= 4 THEN substring(ltrim(rtrim(node)), 1, 2) WHEN len(node)
= 7 THEN substring(ltrim(rtrim(node)), 1, 4) WHEN len(node)
= 10 THEN substring(ltrim(rtrim(node)), 1, 7) END AS parentid,nodename
FROM #
select * from #TREE_INFO --结果查看
drop table #
drop table #TREE_INFO
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[P_Tree_Convert]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[P_Tree_Convert]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE P_Tree_Convert AS
--有限层树形数据转换成无限层树形数据的示例存储过程
--结果数据.
CREATE TABLE [dbo].[#TREE_INFO] (
[NODEID] [varchar](10) NULL , --树形数据节点代码
[PARENTID] [varchar] (10) NULL ,--树形数据节点的父节点代码
[NODENAME] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,--节点名称
[ADDRESS] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,--节点的其它信息
[ICON] [int] NULL --节点的图标编号
) ON [PRIMARY]
--获取有限层树形数据节点数据
SELECT * into #
FROM (SELECT DPCODE1 AS node, DPNAME1 AS nodename
FROM ora_CUSTDEPT
WHERE (DPCODE2 = '00') AND (DPCODE3 = '000') AND (DPCODE4 = '000')
UNION ALL
SELECT DPCODE1 + DPCODE2 AS node, DPNAME2 AS nodename
FROM ora_CUSTDEPT
WHERE (DPCODE3 = '000') AND (DPCODE4 = '000') AND (DPCODE2 <> '00')
UNION ALL
SELECT DPCODE1 + DPCODE2 + DPCODE3 AS node,
DPNAME3 AS nodename
FROM ora_CUSTDEPT
WHERE (DPCODE3 <> '000') AND (DPCODE4 = '000') AND (DPCODE2 <> '00')
UNION ALL
SELECT DPCODE1 + DPCODE2 + DPCODE3 + DPCODE4 AS node,
DPNAME4 AS nodename
FROM ora_CUSTDEPT
WHERE (DPCODE3 <> '000') AND (DPCODE4 <> '000') AND (DPCODE2 <> '00'))
tree_node
ORDER BY node
insert into #TREE_INFO(NODEID, PARENTID, NODENAME)
--从有限层树形数据节点数据获取其父节点数据,后插入结果表
SELECT node, CASE WHEN len(ltrim(rtrim(node))) = 2 THEN '0' WHEN len(node)
= 4 THEN substring(ltrim(rtrim(node)), 1, 2) WHEN len(node)
= 7 THEN substring(ltrim(rtrim(node)), 1, 4) WHEN len(node)
= 10 THEN substring(ltrim(rtrim(node)), 1, 7) END AS parentid,nodename
FROM #
select * from #TREE_INFO --结果查看
drop table #
drop table #TREE_INFO
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
相关文章推荐
- 有限层树形数据转换成无限层树形数据的示例存储过程(MS SQL 2K)
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 将树形结构的数据转换为二维数组 (续 PHP非递归方式实现无限分类(转载))
- sql server动态存储过程按日期保存数据示例
- 存储过程-树形结构数据删除
- 存储过程+数据缓存版的TreeView控件“无限”分级实现
- [源代码]千万级数据分页存储过程示例!
- 存储过程转换数据类型 SQL Server Visual Basic
- 佩特来项目经验小集合(2)___组合查询存储过程,报错 "varchar JBID='' 转换成数据类型 int 时失败"
- SQL图示树形数据表查询存储过程
- [MSSQL]存储过程示例(拷贝数据表--游标使用--更新数据-日期函数的使用)
- MySql 存储过程使用游标循环插入数据示例
- 修改用户定义数据类型对已经编译的存储过程的影响的示例.sql
- MySql存储过程使用游标循环插入数据示例
- [导入][源代码]千万级数据分页存储过程示例!
- 利用批处理 存储过程和数据转换服务包执行sqlserver Agent下的Job
- 存储过程,从数据类型 nvarchar 转换为 int 时出错
- sql server动态存储过程按日期保存数据示例
- SQL2005把数据转换成insert语句的存储过程