请教各位:(sql server2000 ,asp.net ,c#)
设计了两张表:
tkinfo表:
zhu_id, fu_id, title, full_score
1 0 《计算机》 100
2 1 《数据库》 40
3 2 《基础知识》 20
4 2 《数据库开发》 20
5 3 《数据库概念》 10
6 3 《数据库高级知识》 10
......tkdetail表
id, parentid, title, score, type
1 5 什么叫数据库 2 填空
2 5 数据库分为哪些类型 2 填空
...... 我看很多人设计时,都是将科目、章节分别设计一张表,又按填写、单选等类型设计为不同的表。
我现在将tkinfo中用一张表实现科目、章节、知识点用一张表实现四层。现有需要用一个sql语句(最好是存储过程,这样效率更高)来实现得到一个如下的dataset数据集:
id lev1, lev2, lev3, lev4, tille , score, type
1 《计算机》 《数据库》 《基础知识》《数据库概念》 什么叫数据库 2 填空
....
就是从表tkdetail取数据时,要得到它的四个父级目录。请求该如何写这个sql语名(最好再附上存储过程),谢谢!
设计了两张表:
tkinfo表:
zhu_id, fu_id, title, full_score
1 0 《计算机》 100
2 1 《数据库》 40
3 2 《基础知识》 20
4 2 《数据库开发》 20
5 3 《数据库概念》 10
6 3 《数据库高级知识》 10
......tkdetail表
id, parentid, title, score, type
1 5 什么叫数据库 2 填空
2 5 数据库分为哪些类型 2 填空
...... 我看很多人设计时,都是将科目、章节分别设计一张表,又按填写、单选等类型设计为不同的表。
我现在将tkinfo中用一张表实现科目、章节、知识点用一张表实现四层。现有需要用一个sql语句(最好是存储过程,这样效率更高)来实现得到一个如下的dataset数据集:
id lev1, lev2, lev3, lev4, tille , score, type
1 《计算机》 《数据库》 《基础知识》《数据库概念》 什么叫数据库 2 填空
....
就是从表tkdetail取数据时,要得到它的四个父级目录。请求该如何写这个sql语名(最好再附上存储过程),谢谢!
go
insert tkinfo
Select 1 ,0 ,N'《计算机》' ,100
Union Select 2 ,1 ,N'《数据库》' ,40
Union Select 3 ,2 ,N'《基础知识》' ,20
Union Select 4 ,2 ,N'《数据库开发》' ,20
Union Select 5 ,3 ,N'《数据库概念》' ,10
Union Select 6 ,3 ,N'《数据库高级知识》' ,10
Union Select 7 ,5 ,N'《数据库基础》' ,20
Union Select 8 ,7 ,N'《数据库基础-上册》' ,10
Union Select 9 ,8 ,N'《数据库高级-下册》' ,10Create Table tkdetail(id Int, parentid Int, title Nvarchar(100), score Int, type Nvarchar(100))
go
insert tkdetail
Select 1 ,5 ,N'什么叫数据库' ,2 ,N'填空'
Union Select 2 ,8 ,N'数据库分为哪些类型' ,2 ,N'填空'
Union Select 3 ,9 ,N'数据库' ,3 ,N'选择' go
Create Function f_Pid_Title(@ID Int,@place Int)
Returns Nvarchar(1000)
As
Begin
Declare @Level Int,@count Int,@title Nvarchar(1000)
Declare @t_Level Table(zhu_id Int,Level Int,title Nvarchar(100)) Set @Level=1
Insert @t_Level Select @ID,@Level,''
While @@ROWCOUNT>0
Begin
Set @Level=@Level+1
Insert @t_Level Select a.fu_id,@Level,a.title
From tkinfo a,@t_Level b
Where a.zhu_id=b.zhu_id
AND b.Level=@Level-1
End Select @count = Count(1) From @t_Level
Select @title = title From @t_Level Where Abs(Level - @count) = @place
Return @title
End
GO/*
id lev1, lev2, lev3, lev4, tille , score, type
1 《计算机》 《数据库》 《基础知识》《数据库概念》 什么叫数据库 2 填空
*/Select id ,
dbo.f_Pid_Title(parentid,0) lev1,
dbo.f_Pid_Title(parentid,1) lev2,
dbo.f_Pid_Title(parentid,2) lev3,
dbo.f_Pid_Title(parentid,3) lev4,
title,score,type
From tkdetail
Where id = 1/*
id lev1, lev2, lev3, lev4, tille , score, type
2 《计算机》 《数据库》 《基础知识》 《数据库概念》 《数据库基础》 《数据库基础-上册》 数据库分为哪些类型 2 填空
*/Select id ,
dbo.f_Pid_Title(parentid,0) lev1,
dbo.f_Pid_Title(parentid,1) lev2,
dbo.f_Pid_Title(parentid,2) lev3,
dbo.f_Pid_Title(parentid,3) lev4,
dbo.f_Pid_Title(parentid,4) lev5,
dbo.f_Pid_Title(parentid,5) lev6,
title,score,type
From tkdetail
Where id = 2/*
id lev1, lev2, lev3, lev4, tille , score, type
3 《计算机》 《数据库》 《基础知识》 《数据库概念》 《数据库基础》 《数据库基础-上册》 《数据库高级-下册》 数据库 3 选择
*/Select id ,
dbo.f_Pid_Title(parentid,0) lev1,
dbo.f_Pid_Title(parentid,1) lev2,
dbo.f_Pid_Title(parentid,2) lev3,
dbo.f_Pid_Title(parentid,3) lev4,
dbo.f_Pid_Title(parentid,4) lev5,
dbo.f_Pid_Title(parentid,5) lev6,
dbo.f_Pid_Title(parentid,6) lev7,
title,score,type
From tkdetail
Where id = 3Drop Table tkinfo,tkdetail
Drop Function f_Pid_Title