Pomoc w procedurze(dodawanie gościa do bazy)

0

Witam.
Oto treść zadania:

Napisz procedurę dopisującą nowego gościa. Jeśli gość o takim imieniu oraz nazwisku już istnieje, nie wprowadzaj danych.

Oto mój kod:

ALTER PROCEDURE dodaj_goscia (@Imie varchar(30), @Nazwisko varchar(30), @Procent_rabatu int)
AS BEGIN
	DECLARE @id int
	select @id = max(IdGosc)+1 from Gosc
	DECLARE @im varchar(30), @nazw varchar(30)
	DECLARE kursor CURSOR FOR
	SELECT Imie, Nazwisko FROM Gosc
	Open kursor
		FETCH NEXT FROM kursor INTO @im, @nazw;
		WHILE @@FETCH_STATUS=0
			BEGIN
			IF @im = @Imie and @nazw = @Nazwisko
				PRINT 'Taka osoba już istnieje!'
			ELSE
				INSERT INTO GOSC(IdGosc, Imie, Nazwisko, Procent_rabatu)
				VALUES(@id, @Imie, @Nazwisko, @Procent_rabatu)
				PRINT 'Dodano osobę! '+@Imie+' '+ @Nazwisko
			END
	Close kursor
	Deallocate kursor
END

Problem polega na tym, gdy wywołuje procedurę:
exec dodaj_goscia 'Paweł', 'Lenkiewicz', 30
to tworzy się zapętlenie i wyskakuje takie coś jak w drugim załączniku.

2

przy tej procedurze nie ma potrzeby używania kursora.

ALTER PROCEDURE dodaj_goscia (@Imie VARCHAR(30), @Nazwisko VARCHAR(30), @Procent_rabatu INT)
AS 
BEGIN
  if exists (select 1 from Gosc where Imie=@Imie and Nazwisko=@Nazwisko)
  PRINT 'Taka osoba już istnieje!'
  ELSE
  begin
    INSERT INTO Gosc(IdGosc, Imie, Nazwisko, Procent_rabatu)
    select isnull(MAX(IdGosc), 0)+1, @Imie, @Nazwisko, @Procent_rabatu FROM Gosc  /*isnull jest po to, żeby dodało jak pusta tabela*/
    PRINT 'Dodano osobę! '+@Imie+' '+ @Nazwisko
  end
END
0

Dzięki Paweł za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1