我正在SQL Server中编写一个存储过程来更新患者轮班记录。为此,必须验证数据库中是否存在dniPaciente
。如果存在,则更新它,否则,它应该显示一条错误消息,指示未找到dniPaciente
。
我已经尝试了下面的方法,但是它没有为我抛出错误消息。
CREATE PROCEDURE sobreTurno(@dniDelPaciente VARCHAR(8) ,@nu evaFecha DATE,
@nuevaHoraInicio TIME,@nuevaHoraFin TIME)
AS
BEGIN TRY
IF EXISTS (SELECT dniPaciente FROM Turno WHERE dniPaciente=@dniDelPaciente)
UPDATE Turno
SET [fecha]=@nuevaFecha,
[horaInicio]=@nuevaHoraInicio,
[horaFin]=@nuevaHoraFin
WHERE dniPaciente=@dniDelPaciente
END TRY
BEGIN CATCH
PRINT('¡dniPaciente not found in the DATABASE!')
END CATCH
SQL Server抛出的错误应该在Java的catch子句中显示。
try {
CallableStatement sobreTurno = conexionBBDD.getConexionBBDD().prepareCall("{call sobreTurno(?,?,?,?)}");
sobreTurno.setString(1, ventanaAsignacionSobreTurno.getDniPaciente());
sobreTurno.setDate(2, new Date(ventanaAsignacionSobreTurno.getDateChooser().getTime()));
sobreTurno.setTime(3, this.horaInicio);
sobreTurno.setTime(4, this.horaFin);
sobreTurno.execute();
} catch (Exception exeptionBBDD) {
//here I need to show the error message thrown from SQL SERVER
}
正确的存储过程如下
ALTER PROCEDURE sobreTurno(@dniDelPaciente VARCHAR(8) ,@nuevaFecha DATE,
@nuevaHoraInicio TIME,@nuevaHoraFin TIME)
AS
IF EXISTS (SELECT dniPaciente FROM Turno WHERE dniPaciente=@dniDelPaciente)
UPDATE Turno
SET [fecha]=@nuevaFecha,
[horaInicio]=@nuevaHoraInicio,
[horaFin]=@nuevaHoraFin
WHERE dniPaciente=@dniDelPaciente
ELSE THROW 50000, '¡dniPaciente not found in the DATABASE!', 0;