OK. Dużo mi pomógł here wcześniej pracowałem z backendem SQL na prostą ... po prostu nie dla mnie :(... rozwiązanie zegara czasu dla małego biura, w którym pracuję, więc wracam po więcej!Procedura składowana SQL JEŚLI WSTECZ AKTUALIZACJĘ WSTAW ELSE WSTAW
Moja tabela obecnie pracuję z składa się z 6 kolumn:
- data clockDate not null PK
- nazwa_użytkownika varchar (50) NOT NULL PK
- czas clockIn (0)
- łamiąca czasowych (0)
- przerwa w czasie (0)
- czas clockOut (0)
I chociaż ja zorientowali się mój IF NOT EXISTS INSERT ELSE UPDATE
oświadczenie od mojego ostatniego pytania, ale teraz staram się go używać w procedury przechowywanej, zamiast zwykłego zapytania okno, bez powodzenia.
Zasadniczo użytkownik wkraczający w to nie myślenia. Jeśli jednak użytkownik nie wkracza do zegara, ale zegar zostanie wyłączony na czas lunchu, instrukcja musi utworzyć wiersz zamiast aktualizować istniejący wiersz. Ok, więc tutaj jest mój procedura przechowywana:
ALTER PROCEDURE dbo.BreakOut
(
@userName varchar(50)
)
AS
IF EXISTS (SELECT * FROM Clock WHERE clockDate = GETDATE() AND userName = @userName)
BEGIN
UPDATE Clock SET breakOut = GETDATE()
WHERE clockDate = GETDATE() AND userName = @userName
END
ELSE
BEGIN
INSERT INTO Clock (clockDate, userName, breakOut)
VALUES (GETDATE(), @userName, GETDATE())
END
Oto mój problem ... Jeśli użytkownik DID zegar na dzień dostaję klucz podstawowy naruszenie ponieważ procedura przechowywana jest wciąż próbuje uruchomić INSERT
część rachunku i nigdy nie uruchamia linii UPDATE
. Próbowałem go obrócić z IF NOT EXISTS
, a także z tym samym wynikiem. Jaka jest sztuczka, aby IF-ELSE działało w procedurze przechowywanej? Czy można to zrobić w taki sposób, w jaki myślę lub czy muszę studiować oświadczenie Merge
? Moim planem jest uruchomienie procedur przechowywanych z prostego programu Visual Basic na każdej stacji roboczej. Może Dostaję ponad moją głową :(złej moim szefem jest zbyt tanie, aby tylko kupić rozwiązanie zegar czasu
EDIT:
Dziękuję wszystkim za pomoc !! spadam zakochany w tym miejscu, pytania uzyskać odpowiedzi tak szybko !!! Oto moja praca procedura przechowywana:
ALTER PROCEDURE dbo.BreakOut
(
@userName varchar(50)
)
AS
IF EXISTS (SELECT * FROM Clock WHERE DateDiff(dd, GetDate(),clockDate) = 0 AND userName = @userName)
BEGIN
UPDATE Clock SET breakOut = GETDATE()
WHERE DateDiff(dd, GetDate(),clockDate) = 0 AND userName = @userName
END
ELSE
BEGIN
INSERT INTO Clock (clockDate, userName, breakOut)
VALUES (GETDATE(), @userName, GETDATE())
END
Czy to właściwe, czy może to być poprawiona więcej Ponownie dziękuję wszystkim SO MUCH !!!
to wyciągu IF - tam przyzwyczajenie istnieje zapis z getDate time() bo to teraz, ponieważ zwraca czas, też! To, co chcesz zrobić, to sprawdzić, czy istnieje rekord już dla tego użytkownika w tym dniu. – dash
Dziękuję @dash !! – tmhalbert