USE [T]
GO
/****** Object: Table [dbo].[tblUserGroup] Script Date: 11/30/2010 11:14:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tblUserGroup](
[UID] [varchar](64) NOT NULL,
[GID] [varchar](50) NOT NULL,
CONSTRAINT [PK_tblUserGroup] PRIMARY KEY CLUSTERED
(
[UID] ASC,
[GID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[tblUserGroup] ([UID], [GID]) VALUES (N'u1', N'g2')
INSERT [dbo].[tblUserGroup] ([UID], [GID]) VALUES (N'u1', N'g3')
INSERT [dbo].[tblUserGroup] ([UID], [GID]) VALUES (N'u2', N'g5')
/****** Object: Table [dbo].[tblGroupGroup] Script Date: 11/30/2010 11:14:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tblGroupGroup](
[ID] [varchar](50) NOT NULL,
[CID] [varchar](50) NOT NULL,
CONSTRAINT [PK_tblGroupGroup] PRIMARY KEY CLUSTERED
(
[ID] ASC,
[CID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[tblGroupGroup] ([ID], [CID]) VALUES (N'g1', N'g5')
INSERT [dbo].[tblGroupGroup] ([ID], [CID]) VALUES (N'g2', N'g1')
INSERT [dbo].[tblGroupGroup] ([ID], [CID]) VALUES (N'g5', N'g2')
INSERT [dbo].[tblGroupGroup] ([ID], [CID]) VALUES (N'g5', N'g3')
/****** Object: Table [dbo].[tblUserInfo] Script Date: 11/30/2010 11:14:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tblUserInfo](
[ID] [varchar](64) NOT NULL,
CONSTRAINT [PK_tblUserInfo] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[tblUserInfo] ([ID]) VALUES (N'u1')
INSERT [dbo].[tblUserInfo] ([ID]) VALUES (N'u2')
/****** Object: Table [dbo].[tblGroup] Script Date: 11/30/2010 11:14:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tblGroup](
[ID] [varchar](50) NOT NULL,
CONSTRAINT [PK_tblGroup] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[tblGroup] ([ID]) VALUES (N'g1')
INSERT [dbo].[tblGroup] ([ID]) VALUES (N'g2')
INSERT [dbo].[tblGroup] ([ID]) VALUES (N'g3')
INSERT [dbo].[tblGroup] ([ID]) VALUES (N'g4')
INSERT [dbo].[tblGroup] ([ID]) VALUES (N'g5')
/****** Object: UserDefinedFunction [dbo].[GetChildUnit] Script Date: 11/30/2010 11:14:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE Function [dbo].[GetChildUnit](@id varchar(50), @Level int)
Returns @t table(id varchar(50),cid varchar(50),Level int)
As
Begin
if @Level>=32
return
declare @tt table(id varchar(50),cid varchar(50),l int)
set @Level=@Level+1
if @Level=1
insert into @tt select tblgroupgroup.*,@Level from tblusergroup inner join tblgroupgroup on id=gid where uid=@id
else
insert into @tt select *,@Level from tblgroupgroup where id=@id
insert into @t select * from @tt
DECLARE @cid varchar(50)
DECLARE cc CURSOR FOR select cid from @tt
open cc
FETCH NEXT FROM cc INTO @cid
WHILE @@FETCH_STATUS = 0
begin
insert into @t select * from GetChildUnit(@cid,@Level)
FETCH NEXT FROM cc INTO @cid
end
close cc
DEALLOCATE cc
Return
End
GO
/****** Object: ForeignKey [FK_tblUserGroup_tblUserGroup] Script Date: 11/30/2010 11:14:18 ******/
ALTER TABLE [dbo].[tblUserGroup] WITH CHECK ADD CONSTRAINT [FK_tblUserGroup_tblUserGroup] FOREIGN KEY([UID], [GID])
REFERENCES [dbo].[tblUserGroup] ([UID], [GID])
GO
ALTER TABLE [dbo].[tblUserGroup] CHECK CONSTRAINT [FK_tblUserGroup_tblUserGroup]
GO
sql server 2000 遞歸顯示數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.