SQL dodawanie rekordu do bazy

0

Witam z sql w sumie zaczynam swoją zabawę, ale zastanawiam się jak najlepiej dodać rekord do bazy, ze sprawdzeniem czy on się przypadkiem tam nie znajduje. Dodam, że programuję w c# i jako bazy użyję MsSQL

Wcześniej pisząc np. stronę www i chcąc dodać nowego użytkownika robiłem tak :

 
SELECT COUNT(1) FROM Users WHERE Name = 'Zenon'

Sprawdzałem, czy wynik z tego zapytania == 0, jeśli tak to wykonywałem

INSERT INTO Users(Name,Password) VALUES ('Zenon','bla bla bla') 

Teraz ucząc się dalej, wydaje mi się, że można to zrobić inaczej, akurat analizując książkę z podstaw SQL doszedłem do funkcji EXISTS i od razu przypomniał mi się powyższy przykład. Teraz zrobiłbym to tak :

Exists zwraca false, gdy zapytanie nie zwraca wyników, przy użyciu count, gdy nie byłoby żadnego wyniku dostalibyśmy 0, więc count użyć nie możemy./?

IF NOT EXISTS(SELECT Name FROM Users WHERE Name = 'Zenon') 
INSERT INTO Users(Name,Password) VALUES ('Zenon','bla bla bla') 

Widać (wg. mnie), że drugie zapytanie jest bardziej użyteczne, jednak jak wygląda sprawa z walidacją czegoś takiego ? Użytkownikowi musimy zwrócić przecież, czy założył konto, bądź zwrócić błąd, że użytkownik istnieje. Jedyne co mi przychodzi na myśl to (nie wiem jak w C# i ASP.NET -- nie kożystałem) w php była funkcja mysql_insert_id i jeśli zwróciłaby ona 0 to błąd jeśli nie = ok

Chciałbym się dowiedzieć, jak wy rozwiązujecie taki błahy "problem". Który sposób jest "bardziej" poprawny, bądź jak Wy to robicie.

0

Masz tam IF-a więc możesz spokojnie rzucić RAISERROR, a następnie przechwycić wyjątek w aplikacji za pomocą try-catch.

SQL: http://msdn.microsoft.com/en-us/library/ms178592.aspx
C#: http://msdn.microsoft.com/en-us/library/0yd65esw%28v=vs.80%29.aspx
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.aspx

0

AdamPL dzięki za odpowiedź, ale główne moje pytanie : jak będzie optymalnie.

Czy zastosować sposób 1, drugi (dodając wyjątek).

Czy możliwe, czy użyć tylko sam insert (bez sprawdzania), i w tabeli SQL ustawić pole imię na klucz unikalny, a co za tym idzie SQL sam wygeneruje błąd, a my go tylko przechwycimy.

Sprawa jest naprawdę błaha, ale zarówno w programowaniu jak i sql brakuje mi w książkach takich informacji, że na dany problem mamy parę rozwiązań, ale głównie należy robić tak a nie inaczej bo... :)

0

Ja myślę, że unique na takim polu to podstawa.
A po drugie, to można się pokusić o sprawdzenie czy istnieje już użytkownik o takiej nazwie i wyświetlenie użytkownikowi komunikatu, jeszcze zanim wyda polecenie założenia konta.

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