举个例子(仅仅举例子而已):学生表student里有两个字段:id(学生编号),courses(课程编号集合)有一条数据:
id(学生编号) courses(课程编号集合)
1 0,1 课程表course里有两个字段:id(课程编号),name(课程名称)有两条数据:
id(课程编号),name(课程名称)
0 英语
1 数学如何通过sql语句来获得该学生的课程名称?通过C#语句实现比较简单。也就是获得这样的结果:
学生编号 课程编号 课程名称
1 0 英语
1 1 数学
id(学生编号) courses(课程编号集合)
1 0,1 课程表course里有两个字段:id(课程编号),name(课程名称)有两条数据:
id(课程编号),name(课程名称)
0 英语
1 数学如何通过sql语句来获得该学生的课程名称?通过C#语句实现比较简单。也就是获得这样的结果:
学生编号 课程编号 课程名称
1 0 英语
1 1 数学
AS
BEGIN
declare @courses varchar(1000)
declare @sql nvarchar(1000)
select @courses = courses from student where id = @studentid
if courses is not null
begin
set @sql = 'select name from course where id in('+@courses+')'
execute(@sql)
end
END 没有测试,仅作参考
@XID int
AS
select @XID as studentid,id,name from course where id in (select courses form student where id=@XID)
GO
分割函数
create function f_split(@c varchar(2000),@split varchar(2))
returns @t table(col varchar(20))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
select * from dbo.f_split(select courses from student where id=@id,',')
根据分割出来的课程编号查询课程名称
id(学生编号) courses(课程编号集合)
1 0,1 关系表应该是这样的
id(学生编号) courses(课程编号集合)
1 0
1 1表明1学生有两门课
declare @student table (id int,courses varchar(20))
insert into @student
select 1,'0,1'
SELECT id AS 学生编号,courses as 课程编号 FROM @student
declare @courses table (id int,coursesname varchar(4))
insert into @courses
select 0,'英语' union all
select 1,'数学' union all
SELECT 2,'语文'
select id as 课程编号,coursesname as 课程名称 from @coursesdeclare @param int
set @param=1;--应该是从外面传进来的学生iddeclare @my varchar(200)
select @my=courses from @student where id=@param
select @param as 学生编号,id as 课程编号,coursesname as 课程名称 from @courses where id in (
select col from f_split(@my,','))
create function [dbo].[f_split](@c varchar(2000),@split varchar(2))
returns @t table(col varchar(200))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
CREATE PROCEDURE getcourse
@XID int
AS
select @XID as studentid,id,name from course where id in (select courses form student where id=@XID)
GO
这条是对的。数据库设计没有不科学。最好在学生表的Course字段中使用回车键,形成一个列表,你在做前台开发的时候会有用的。