Stored Procedures - Transação e Exists

SQL Server

21/06/2013

criar uma Stored Procedure (gerenciada por uma transação) para Alocar uma consulta com um certo médico em um certo horário, deverá ser verificado se não existe choque de horário.


CREATE PROCEDURE ALOCAR_CONSULTA
@CrmMedico varchar(20),
@CpfPaciente varchar(20),
@DataConsulta date,
@HorarioConsulta time(7),
@ValorConsulta decimal(7,2)
AS 
BEGIN
if (@HorarioConsulta <> (select c.horarioConsulta from Consultas as C ))
 
insert into Consultas (CrmMedico, CpfPaciente, DataConsulta, HorarioConsulta, ValorConsulta)
values (@CrmMedico, @CpfPaciente, @DataConsulta, @HorarioConsulta, @valorConsulta)
 
else 
print 'horario existente' 
 
END



Só que precisa ser gerenciada por uma transação, que eu nao sei. E ae no if precisa usar a clausula EXISTS ou NOT EXISTS, alguem ajuda ae?
Bgsouza

Bgsouza

Curtidas 0

Respostas

Mariana Carvalho

Mariana Carvalho

21/06/2013

achei um tanto complexa.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

21/06/2013

Para começar, o IF seria mais ou menos assim:
IF NOT EXISTS (SELECT C.horarioConsulta FROM Consultas C WHERE C.horarioConsulta = @HorarioConsulta)
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

21/06/2013

Sobre a transação, o esquema é o seguinte:
BEGIN TRANSACTION

--INSTRUÇÕES

COMMMIT --OU ROLLBACK


Então você poderia colocar o COMMIT e o ROLLBACK dentro de estruturas condicionais. Por exemplo:
BEGIN TRANSACTION

IF (alguma coisa)
COMMIT
ELSE
ROLLBACK
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

21/06/2013

No caso do seu procedure, seria mais ou menos assim:
BEGIN TRANSACTION

COMMIT

ROLLBACK

CREATE PROCEDURE ALOCAR_CONSULTA
	@CrmMedico varchar(20),
	@CpfPaciente varchar(20),
	@DataConsulta date,
	@HorarioConsulta time(7),
	@ValorConsulta decimal(7,2)
AS 
BEGIN

	BEGIN TRANSACTION
		IF NOT EXISTS (SELECT C.horarioConsulta FROM Consultas C WHERE C.horarioConsulta = @HorarioConsulta)
		BEGIN
  			INSERT INTO Consultas (CrmMedico, CpfPaciente, DataConsulta, HorarioConsulta, ValorConsulta)
			VALUES (@CrmMedico, @CpfPaciente, @DataConsulta, @HorarioConsulta, @valorConsulta)
  		
			COMMIT
		END
		ELSE
		BEGIN
			PRINT 'Horário existente'
			ROLLBACK
		END
  
END
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

21/06/2013

E aí, conseguiu?
GOSTEI 0
POSTAR