sql 递归函数,根据父级ID获取所有子级(含自己)
2011-07-25 17:05
519 查看
------------------------------------
--用途:根据商家ID获取所有子商家(含自己商家)
--说明:
--时间:2011/5/6 12:44:42
--作者:李海生@Bool为1时包括自己商家信息0时不包括
--例子:select * from GetChildParent(17,1)
------------------------------------
ALTER FUNCTION [dbo].[GetChildParent]
(
@ID VARCHAR(10) ,
@bool INT
)
RETURNS @t TABLE
(
ID VARCHAR(10) ,
ParentID VARCHAR(10) ,
OrgName NVARCHAR(50) ,
Level INT
)
AS
BEGIN
DECLARE @counts INT
SELECT @counts = ISNULL(COUNT(*), 0)
FROM dbo.Customers_Business
WHERE Bid = @ID
IF ( @counts > 0 )
BEGIN
DECLARE @OrgName NVARCHAR(1000)
SELECT @OrgName = CONVERT(NVARCHAR(1000), Name) + '('
+ CONVERT(NVARCHAR(1000), Bid) + ')'
FROM Customers_Business
WHERE Bid = @ID
DECLARE @i INT
SET @i = 1
IF ( @bool > 0 )
BEGIN
INSERT INTO @t
SELECT @ID ,
@ID ,
@OrgName ,
0 --当前级,本级,如果不要的话可以注释掉或再加个参数来选择操作
INSERT INTO @t
SELECT Bid ,
ParentId ,
CONVERT(NVARCHAR(1000), Name) + '('
+ CONVERT(NVARCHAR(1000), Bid) + ')' ,
@i
FROM dbo.Customers_Business
WHERE ParentId = @ID
END
ELSE
BEGIN
INSERT INTO @t
SELECT Bid ,
ParentId ,
CONVERT(NVARCHAR(1000), Name) + '('
+ CONVERT(NVARCHAR(1000), Bid) + ')' ,
@i
FROM dbo.Customers_Business
WHERE ParentId = @ID
END
WHILE @@rowcount <> 0
BEGIN
SET @i = @i + 1
INSERT INTO @t
SELECT a.Bid ,
a.ParentId ,
a.Name ,
@i
FROM dbo.Customers_Business a ,
@t b
WHERE a.ParentId = b.ID
AND b.Level = @i - 1
END
END
RETURN
END
--用途:根据商家ID获取所有子商家(含自己商家)
--说明:
--时间:2011/5/6 12:44:42
--作者:李海生@Bool为1时包括自己商家信息0时不包括
--例子:select * from GetChildParent(17,1)
------------------------------------
ALTER FUNCTION [dbo].[GetChildParent]
(
@ID VARCHAR(10) ,
@bool INT
)
RETURNS @t TABLE
(
ID VARCHAR(10) ,
ParentID VARCHAR(10) ,
OrgName NVARCHAR(50) ,
Level INT
)
AS
BEGIN
DECLARE @counts INT
SELECT @counts = ISNULL(COUNT(*), 0)
FROM dbo.Customers_Business
WHERE Bid = @ID
IF ( @counts > 0 )
BEGIN
DECLARE @OrgName NVARCHAR(1000)
SELECT @OrgName = CONVERT(NVARCHAR(1000), Name) + '('
+ CONVERT(NVARCHAR(1000), Bid) + ')'
FROM Customers_Business
WHERE Bid = @ID
DECLARE @i INT
SET @i = 1
IF ( @bool > 0 )
BEGIN
INSERT INTO @t
SELECT @ID ,
@ID ,
@OrgName ,
0 --当前级,本级,如果不要的话可以注释掉或再加个参数来选择操作
INSERT INTO @t
SELECT Bid ,
ParentId ,
CONVERT(NVARCHAR(1000), Name) + '('
+ CONVERT(NVARCHAR(1000), Bid) + ')' ,
@i
FROM dbo.Customers_Business
WHERE ParentId = @ID
END
ELSE
BEGIN
INSERT INTO @t
SELECT Bid ,
ParentId ,
CONVERT(NVARCHAR(1000), Name) + '('
+ CONVERT(NVARCHAR(1000), Bid) + ')' ,
@i
FROM dbo.Customers_Business
WHERE ParentId = @ID
END
WHILE @@rowcount <> 0
BEGIN
SET @i = @i + 1
INSERT INTO @t
SELECT a.Bid ,
a.ParentId ,
a.Name ,
@i
FROM dbo.Customers_Business a ,
@t b
WHERE a.ParentId = b.ID
AND b.Level = @i - 1
END
END
RETURN
END
相关文章推荐
- 根据子级ID获取其所有父级
- Mysql 根据id查所有父级或子级
- mysql 根据子级id查询其所有的父级的
- 根据id查询出所有的父级和子级
- Mysql 根据id查所有父级或子级
- sql如何根据父级Id得到所有下级的记录
- SQL Function(无限级分类根据ID获取其所有下属类别ID)
- mybatis根据父级编号获取所有的子级
- mysql sql 根据父级id查询书所有的子孙级数据,或根据子级id查询对应的父级
- 根据根节点获取所有的子节点SQL语句
- magento中根据用户的id获取用户的所有订单以及每个订单中的物品 以及物品的相关属性
- sql_根据父栏目id获取子栏目
- SQL递归函数列出父级的所有子级(ID ParentID模式)
- Windows 下 根据进程名获取进程ID 以及该进程下所有窗口的句柄
- Hibernate跨级修改子级数据,Hibernate根据父级ID跨级修改子级数据
- MSSQL 下递归CTE的应用通过父级获取所有对应的子级节点(一)
- SQL递归函数列出父级的所有子级(ID ParentID模式)
- C++ Windows 下 根据进程名获取进程ID 以及该进程下所有窗口的句柄
- IOS_根据Bundle ID 唤醒App(获取手机里所有APP包名)
- SQL获取SQL Server 根据表名获取表的所有列及属性