之情况:
该表是关于特定考试的注册学生人数。共有4列:
1- ExamId.
2- studentId.
3- semesterId.
4- numeric code.(to keep students' identity hidden)
已填写除数字代码以外的所有字段。 所有学生都进入表格后。数字代码将随机分配给每个学生,数字代码的范围因表格中输入的学生数量而异。 就像有100名学生一样,响了1-100。
要求:
数字代码必须在表格中输入的1到最多学生之间。
这些数字应该是随机分配的。
范围之间不应错过任何数字。
不允许重复。
我尝试了很多查询但都徒劳无功。
我正在使用Sql-Server-2008。
感谢您的期待。
答案 0 :(得分:3)
使用ROW_NUMBER()OVER(ORDER BY NEWID() ASC)
。像这样的东西
UPDATE T SET numericcode = n
FROM ExamTable T
inner join
(SELECT ExamId,studentId,semesterId,ROW_NUMBER()OVER(ORDER BY NEWID() ASC) n
FROM ExamTable)T2
ON T.ExamId = T2.ExamID
AND T.studentId = T2.studentId
AND T.semesterId = T2.semesterId
您的要求:
1-数字代码必须介于表格中输入的1~最大学生之间。
自ROW_NUMBER()
起,它将在表格中的1到最大记录之间。
使用2-数字应随机分配。
ROW_NUMBER()
生成 NEWID()
保证随机性。
3-范围之间不应错过任何数字。
ROW_NUMBER()
增量为1,因此没有遗漏数字
4-不允许重复。
使用ROW_NUMBER()