Tengo una tabla que contiene una relación estudiante-grado:Operación de estilo "Combinar" con valores literales?
Student Grade StartDate EndDate
1 1 09/01/2009 NULL
2 2 09/01/2010 NULL
2 1 09/01/2009 06/15/2010
Estoy tratando de escribir un procedimiento almacenado que toma Student
, Grade
y StartDate
, y me gustaría que
- cheque para asegurarse de que estos valores no sean duplicados
- inserte el registro si no es un duplicado
- si hay un registro de estudiante existente, y tiene un
EndDate = NULL
, luego actualice ese registro con elStartDate
del nuevo registro.
Por ejemplo, si llamo el procedimiento y el pase en 1
, 2
, 09/01/2010
, me gustaría terminar 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
Esto suena como que podría utilizar MERGE
, excepto que estoy pasando valores literales, y necesito realizar más de una acción. También tengo un terrible dolor de cabeza esta mañana y parece que no puedo pensar con claridad, así que me estoy concentrando en esta solución MERGE
. Si hay una manera más obvia de hacerlo, no tengas miedo de señalarlo.
Oh, excelente. ¡No sabía que podrías usar valores literales con 'MERGE'! Intenté algo similar, pero no pensé usar los alias, lo que parece obvio ahora. Esto no es exactamente lo que necesito, ya que necesito insertarlo y actualizarlo cuando coincida, pero estoy seguro de que puedo encontrar una solución allí. El quid de la cuestión fue cómo usar 'MERGE' con mis valores. ¡Muchas gracias! –
También podría usar algo como esto: USO (VALORES (@Student, @Grade, @StartDate)) AS [fila] (Estudiante, Grado, Fecha de inicio) – Davos
@Davos Me gustaría ver su comentario en un responder. – yzorg