[MSSQL 2005] Sprawdzenie czy istnieje rekord przed INSERTEM

0

Witam serdecznie, projektuj małą aplikacje bazodanową C# + MS SQL 2005 Express, zrealizowałem 90% postawionych sobie celów i prosze o pomoc przy ostatnich 10%. Mam następującą tabele

idTabela PK
idOsoba FK
opis VarChar(20)
stanowisko VarChar(20)

INSERT INTO [Tabela] ([idOsoba], [opis], [stanowisko] VALUES (@idOsoba, @opis, @stanowisko)

W programie wygląda to tak, że osobe wybieram ze zbindowanej kontrolki comboBox, opis to RichTexBox, i stanowisko to też comboBox z ta róznica ze nie zbindowany tylko ma wpisane na sztywno 4 pozycje do wyboru.

Problem w tym, że chcę zapobiec sytuacji gdzie przypisze stanowisko kierownika(jedna z opcji wyboru) np. Jasiowi Kowalskiemu a potem będę mógł to zrobić jeszcze raz. Chce wtedy zgłosić jakiś komunikat użytkownikowi że Jasiu juz jest kierownikiem i można mu przypisać tylko 3 pozostałe opcje.

PS. Wiem, że sen aplikacji jest mało logiczny, szef mi kazał w pracy takie coś zrobić a programuje hobbystycznie i stąd chyba moje braki. Proszę o pomoc

0

Sposobów na zrealizowanie takiej funkcjonalności jest co najmniej kilka.

  1. Możesz za pomocą SELECT-a sprawdzić przed insertem czy taki rekord istnieje i obsłużyć wynik w aplikacji.
  2. Możesz skorzystać z konstrukcji
IF NOT EXISTS (SELECT costam FROM tabela) --sprawdzamy czy taki rekord istnieje jeżeli nie to insert
  INSERT INTO [Tabela] ([idOsoba], [opis], [stanowisko] VALUES (@idOsoba, @opis, @stanowisko);
  1. Możesz również napisać coś w stylu:
INSERT INTO [Tabela] ([idOsoba], [opis], [stanowisko])
SELECT @idOsoba, @opis, @stanowisko
FROM Tabela
WHERE --jakiś warunek zwracający rekod tylko jak powinien być wstawiony rekord;
  • obsłużenie błędu.

Powodzenia

0

bardziej elegancko było by przed pokazaniem okienka z dodaniem nowej osoby sprawdzić, czy jest już kierownik i po prostu usunąć pozycję "kierownik" z comboboxa

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