2015-05-01 12 views
5

scenerio:Làm thế nào tôi có thể cập nhật một lĩnh vực của một bảng với những con số ngẫu nhiên trong phạm vi cụ thể

Bảng này là về số lượng sinh viên đăng ký cho kỳ thi cụ thể. Có 4 cột:

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

Tất cả các trường ngoại trừ mã số đã được điền. Sau khi tất cả học sinh được nhập vào bảng. một mã số sẽ được phân bổ RANDOMLY cho mỗi học sinh, phạm vi của mã số thay đổi theo số học sinh đã nhập trong bảng. Giống như nếu có 100 học sinh thì độ rung là 1-100.

Các quy ñònh:

  1. Mã số phải ngả mình giữa 1 và tối đa không của sinh viên vào trong bảng.

  2. Các số nên được bỏ chọn ngẫu nhiên.

  3. Không thể bỏ qua số giữa phạm vi.

  4. Không được phép sao chép.

Tôi đã thử nhiều truy vấn nhưng tất cả đều vô ích.

Tôi đang làm việc với Sql-Server-2008.

Cảm ơn bạn đã dự đoán.

Trả lời

3

Sử dụng ROW_NUMBER()OVER(ORDER BY NEWID() ASC). Một cái gì đó như thế này

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 

Yêu cầu của bạn:

1- Các mã số phải từ 1 ~ tối đa không của sinh viên vào trong bảng.

Kể từ ngày ROW_NUMBER(), nó sẽ nằm trong khoảng từ 1 đến tối đa trong bảng.

2- Các số phải được phân bổ ngẫu nhiên.

ROW_NUMBER() được tạo bằng cách sử dụng NEWID() đảm bảo tính ngẫu nhiên.

3- Không thể bỏ qua số giữa phạm vi.

ROW_NUMBER() là gia tăng thêm 1 nên không có số bỏ lỡ

4- Không trùng lặp cho phép.

Không có bản sao khi sử dụng ROW_NUMBER()

+0

Thanks a lot thưa ngài, tuyệt vời. Cảm ơn một lần nữa. – JamshaidRiaz

Các vấn đề liên quan