一个数据库操作的问题,大家帮忙看看!
有两个表,一个是题库表(存放)试题,一个是出题条件表(存放出题的条件)
题库表:
题号 题型 章节 难度
01 选择 1 1
出题条件表:
题型,章节,难度为1题数,难度为2题数,难度为3题数,是否排除
选择 * 5 5 5 否
选择 1 2 3 3 否
选择 2 0 0 0 是
(说明,章节如果为*,表示 此题型在试卷中的题数,章节为具体植时,表示在此章节要出的题数)
如果,是否排除字段 为是,表示,在此章节不出题
然后就这样,根据出题表中的若干条件,从题库将试题随机选出来,将题号存放到临时表中.
我太笨,希望高手 能帮帮吗?要实现,该怎么做,谢了
问题点数:50、回复次数:5Top
1 楼minajo21(大眼睛)回复于 2005-04-04 16:02:36 得分 0
实在看不懂你的描述...Top
2 楼xspf()回复于 2005-04-08 14:28:24 得分 50
我觉得除了动态创建SQL语句外,没有什么别的方法。
我照我的思路写了一个,你看看能不能用。
DECLARE @Sql varchar(6400)
SELECT NULL AS [题号] INTO #tempTable
DECLARE cur_Sql CURSOR FOR
SELECT
'INSERT INTO #tempTable + ' +
'SELECT TOP ' + 难度为1题数 + ' [题号] ' +
'FROM [题库表] ' +
'WHERE 题型=' + 题型 + ' ,章节=' + 章节 + ',难度=1 ' +
'ORDER BY NEWID() ' +
'INSERT INTO #tempTable ' +
'SELECT TOP ' + 难度为2题数 + ' [题号] ' +
'FROM [题库表] ' +
'WHERE 题型=' + 题型 + ' ,章节=' + 章节 + ',难度=2 ' +
'ORDER BY NEWID() ' +
'INSERT INTO #tempTable ' +
'SELECT TOP ' + 难度为3题数 + ' [题号] ' +
'FROM [题库表] ' +
'WHERE 题型=' + 题型 + ' ,章节=' + 章节 + ',难度=3 ' +
'ORDER BY NEWID() '
FROM [出题条件表]
WHERE 章节<>'*' AND 是否排除='否'
OPEN cur_Sql
FETCH NEXT INTO @Sql
WHILE(@@FETCH_STATUS=0)
BEGIN
EXECUTE(@Sql)
IF(@@ERROR<>0)
BEGIN
RAISERROR('出错!',16,1)
CLOSE cur_Sql
DEALLOCATE cur_Sql
RETURN
END
FETCH INTO @Sql
END
CLOSE cur_Sql
DEALLOCATE cur_Sql
SELECT * FROM #tempTable
Top
3 楼xspf()回复于 2005-04-08 14:30:25 得分 0
贴错了
DECLARE @Sql varchar(6400)
SELECT NULL AS [题号] INTO #tempTable
DECLARE cur_Sql CURSOR FOR
SELECT
'INSERT INTO #tempTable + ' +
'SELECT TOP ' + 难度为1题数 + ' [题号] ' +
'FROM [题库表] ' +
'WHERE 题型=' + 题型 + ' ,章节=' + 章节 + ',难度=1 ' +
'ORDER BY NEWID() ' +
'INSERT INTO #tempTable ' +
'SELECT TOP ' + 难度为2题数 + ' [题号] ' +
'FROM [题库表] ' +
'WHERE 题型=' + 题型 + ' ,章节=' + 章节 + ',难度=2 ' +
'ORDER BY NEWID() ' +
'INSERT INTO #tempTable ' +
'SELECT TOP ' + 难度为3题数 + ' [题号] ' +
'FROM [题库表] ' +
'WHERE 题型=' + 题型 + ' ,章节=' + 章节 + ',难度=3 ' +
'ORDER BY NEWID() '
FROM [出题条件表]
WHERE 章节<>'*' AND 是否排除='否'
OPEN cur_Sql
FETCH NEXT FROM cur_Sql INTO @Sql
WHILE(@@FETCH_STATUS=0)
BEGIN
EXECUTE(@Sql)
IF(@@ERROR<>0)
BEGIN
RAISERROR('出错!',16,1)
CLOSE cur_Sql
DEALLOCATE cur_Sql
RETURN
END
FETCH FROM cur_Sql INTO @Sql
END
CLOSE cur_Sql
DEALLOCATE cur_Sql
SELECT * FROM #tempTable
Top
4 楼javacb(java)回复于 2005-04-09 22:29:45 得分 0
gzTop
5 楼javacb(java)回复于 2005-04-09 22:35:15 得分 0
gzTop




