先建立个函数,
用来判断str2中含有多少个@str1
create  function getsl(@str2 nvarchar(50),@str1 nvarchar(1))
returns int
as
  begin
    declare @TempStr nvarchar(50)
    set @tempStr=replace(@str2,@str1,'')
    return len(@str2)-len(@tempStr)
  end然后用这个语句试试
select * from 学生表 
where dbo.getsl(left(考试科目一,1)+left(考试科目二,1)
            +left(考试科目三,1)+left(考试科目四,1),'A')>1   
  or dbo.getsl(left(考试科目一,1)+left(考试科目二,1)
            +left(考试科目三,1)+left(考试科目四,1),'B')>1
  or dbo.getsl(left(考试科目一,1)+left(考试科目二,1)
            +left(考试科目三,1)+left(考试科目四,1),'C')>1
  or dbo.getsl(left(考试科目一,1)+left(考试科目二,1)
            +left(考试科目三,1)+left(考试科目四,1),'D')>1
  or 考试科目一 not in (select 课程编号 from 课程表)
  or 考试科目二 not in (select 课程编号 from 课程表)
  or 考试科目二 not in (select 课程编号 from 课程表)
  or 考试科目二 not in (select 课程编号 from 课程表)     
  

解决方案 »

  1.   

    可能我说得太复杂了吧,现在把经简单化点:
    现在我手里有的只有两个表,一个是:学生考试表,结果如下:
    学号,专业,考试科目一,考试科目二,考试科目三,考试科目四第二个表是课程表:课程编号,课程名称我想判断学生的考试科目是否正确,正确的含义有两层:第一是它填写的考试科目一至四是不是在课程表内,这个好办;第二是检查每一门的考试科目是不是在指定了范围内的科目,比如:某个专业考试科目的某个组合中的考试科目二只能考:B001或B052或B086,现在就是要检查这个学生所填写的考试科目二是不是属于上面的三门中的一门。如果是则通过,否则就要检查出来。
    我的想法是是不是还需要建立一个组合库,但怎么建呢?或还是有其它的办法?
      

  2.   

    create table 组合表(某个专业,考试科目)