Ho una tabella che contiene un rapporto studente-grade:Operazione di tipo "Unisci" con valori letterali?
Student Grade StartDate EndDate
1 1 09/01/2009 NULL
2 2 09/01/2010 NULL
2 1 09/01/2009 06/15/2010
Sto cercando di scrivere una stored procedure che prende Student
, Grade
e StartDate
, e vorrei che a
- controllo per assicurarsi che questi valori non sono duplicati
- inserire il record se non è un duplicato
- se v'è un record studente esistente, e ha un
EndDate = NULL
, quindi aggiorna quel record con loStartDate
del nuovo record.
Per esempio, se io chiamo la procedura e passare 1
, 2
, 09/01/2010
, mi piacerebbe finire con:
Student Grade StartDate EndDate
1 2 09/01/2010 NULL
1 1 09/01/2009 09/01/2010
2 2 09/01/2010 NULL
2 1 09/01/2009 06/15/2010
Questo suona come ho potuto utilizzare MERGE
, se non che io sto passando valori letterali, e ho bisogno di eseguire più di un'azione. Ho anche mal di testa stamattina e non riesco a pensare chiaramente, quindi mi sto fissando su questa soluzione MERGE
. Se c'è un modo più ovvio per farlo, non aver paura di farlo notare.
Oh, eccellente. Non sapevo che potresti usare valori letterali con 'MERGE'! Ho provato qualcosa di simile, ma non ho pensato di usare gli alias, che ora sembrano ovvi. Questo non è esattamente ciò di cui ho bisogno, dal momento che ho bisogno di inserire e aggiornare quando abbinato, ma sono sicuro che posso trovare una soluzione lì. Il vero nodo di ciò era come usare "MERGE" con i miei valori. Grazie mille! –
Puoi anche usare qualcosa del tipo: UTILIZZO (VALORI (@Student, @Grade, @StartDate)) AS [riga] (Studente, Grado, Data di inizio) – Davos
@Davos Mi piacerebbe molto vedere il tuo commento in un risposta. – yzorg