在T-SQL中,比较答案字符串和答案键的最有效方法是什么
这些考试通常有大约120个问题。目前,这些字符串与键进行比较,并指定值1或0。完成后,将原始分数加总1 是否有任何T-SQL函数,如intersect或diff或其他不同的函数,可以为100000名考生尽快处理此过程 提前感谢您的专业知识在T-SQL中,比较答案字符串和答案键的最有效方法是什么,sql,algorithm,tsql,comparison,Sql,Algorithm,Tsql,Comparison,这些考试通常有大约120个问题。目前,这些字符串与键进行比较,并指定值1或0。完成后,将原始分数加总1 是否有任何T-SQL函数,如intersect或diff或其他不同的函数,可以为100000名考生尽快处理此过程 提前感谢您的专业知识 -史蒂文试着选择一个与正确答案相等的问题。我假设你在一个表中有学生的测试,在另一个表中有键;这样的事情应该行得通: select student_test.student_id, student_test.test_id, student_te
-史蒂文试着选择一个与正确答案相等的问题。我假设你在一个表中有学生的测试,在另一个表中有键;这样的事情应该行得通:
select student_test.student_id,
student_test.test_id,
student_test.question_id,
(student_test.answer == test_key.answer OR (student_test.answer IS NULL AND test_key.answer IS NULL))
from student_test
INNER JOIN test_key
ON student_test.test_id = test_key.test_id
AND student_test.question_id = test_key.question_id
WHERE student_test.test_id = <the test to grade>
您可以按学生和测试对结果进行分组,如果希望DB给出总分,则将最后一列相加。这将给出测试的详细对/错分析
编辑:答案被存储为一个连续的字符串,这使得编辑变得更加困难。您很可能需要以一种程序化的方式使用光标来实现这一点,这意味着每个学生的答案都会被加载、子串到varchar1s中,并通过折磨行的方式与RBAR行中的键进行比较。您还可以实现一个标量值函数,将字符串a和字符串B一次比较一个字符,并返回差异数,然后从驱动查询调用该函数,该查询将为每个学生调用此函数。类似的操作可能适合您:
select student_id, studentname, answers, 0 as score
into #scores from test_answers
declare @studentid int
declare @i int
declare @answers varchar(120)
declare @testkey varchar(120)
select @testkey = test_key from test_keys where test_id = 1234
declare student_cursor cursor for
select student_id from #scores
open student_cursor
fetch next from student_cursor into @studentid
while @@FETCH_STATUS = 0
begin
select @i = 1
select @answers = answers from #scores where student_id = @studentid
while @i < len(@answers)
begin
if mid(@answers, @i, 1) = mid(@testkey, @i, 1)
update #scores set score = score + 1 where student_id = @studentid
select @i = @i + 1
end
fetch next from student_cursor into @studentid
end
select * from #scores
drop table #scores
我怀疑这是一种最有效的方法,但至少这是一个不错的起点。应答字符串和应答键都存储为字符串而不是表中的行。这将如何改变您在上面发布的逻辑。换句话说,我从考生id:1111111答案字符串开始:abcddcabbcdd答案键:abdcddabccdd你敢说你在SQLServer中的记录由一列组成,其中包含一个长字符串,由120个字符组成,代表120个问题的多项选择答案,然后是另一个由正确的多项选择答案组成的字符串?字符串中的答案比将答案作为单独的行存储在表格user_id、testnumber QUEST_number、ANSWERT…中要困难得多,那么与答案表格进行比较就相对简单了。因为它被保存在一列中,所以您必须循环它,或者使用子字符串来比较字符串120中的每个字母,这就有点不可行了。您是否有可能重新排列DB模式,以从字符串格式中获得这些答案?