2015-05-01 10 views
5

Scenerio:Come posso aggiornare un campo di una tabella con i numeri casuali di gamma specifica

La tabella è di circa il numero di studenti iscritti per gli esami specifici. Ci sono 4 colonne:

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

Tutti i campi tranne il codice numerico sono già compilati. Dopo aver inserito tutti gli studenti nella tabella. un codice numerico sarà assegnato CASUALMENTE a ogni studente, l'intervallo del codice numerico varia sul numero degli studenti inseriti nella tabella. Come se ci fossero 100 studenti il ​​raggio è 1-100.

I Requirments:

  1. Il codice numerico deve liscivia tra 1 e il massimo numero di studenti registrati nella tabella.

  2. I numeri devono essere assegnati in modo casuale.

  3. Nessun numero deve essere perso tra la gamma.

  4. Nessun duplicato consentito.

Ho provato molte domande ma tutto invano.

Sto lavorando con Sql-Server-2008.

Grazie in anticipo.

risposta

3

Utilizzare ROW_NUMBER()OVER(ORDER BY NEWID() ASC). Qualcosa di simile

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 

tua richiesta:

1- Il codice numerico deve essere compreso tra 1 ~ massimo numero di studenti iscritti nella tabella.

Dal suo ROW_NUMBER(), sarà tra 1 e il massimo record nella tabella.

2- I numeri devono essere assegnati in modo casuale.

ROW_NUMBER() viene generato utilizzando NEWID() garantisce casualità.

3- Nessun numero deve essere perso tra la gamma.

ROW_NUMBER() è incrementale da 1 in modo che nessun numero perso

4- Duplicati non sono ammessi.

ci sono duplicati quando si utilizza ROW_NUMBER()

+0

Grazie signore molto, sorprendente. Grazie ancora. – JamshaidRiaz

Problemi correlati