如何使用特定范围的随机数更新表的字段

时间:2015-05-01 08:23:27

标签: sql sql-server

之情况:

该表是关于特定考试的注册学生人数。共有4列:

1- ExamId.
2- studentId.
3- semesterId.
4- numeric code.(to keep students' identity hidden)

已填写除数字代码以外的所有字段。 所有学生都进入表格后。数字代码将随机分配给每个学生,数字代码的范围因表格中输入的学生数量而异。 就像有100名学生一样,响了1-100。

要求:

  1. 数字代码必须在表格中输入的1到最多学生之间。

  2. 这些数字应该是随机分配的。

  3. 范围之间不应错过任何数字。

  4. 不允许重复。

  5. 我尝试了很多查询但都徒劳无功。

    我正在使用Sql-Server-2008。

    感谢您的期待。

1 个答案:

答案 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()

时没有重复项