ХОРОШО. Я получил большую помощь здесь ранее работал с серверной частью SQL до простого... просто не для меня :(... решение для часов для небольшого офиса, в котором я работаю, поэтому я назад для больше!
Моя таблица, с которой я сейчас работаю, состоит из 6 столбцов:
Хотя я понял свое утверждение IF NOT EXISTS INSERT ELSE UPDATE
из моего последнего вопроса, но теперь я безуспешно пытаюсь использовать его в хранимой процедуре, а не в обычном окне запроса.
По сути, пользователь, регистрирующий время, -не представляет сложности. Однако, если пользователь не приходит, но уходит на обед, инструкция должна создать строку вместо обновления существующей строки.Итак, вот моя хранимая процедура:
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
Вот моя проблема... Если пользователь ДЕЙСТВУЕТ часы в течение дня, я получаю нарушение первичного ключа, потому что хранимая процедура все еще пытается запустить часть оператора INSERT
и никогда не запускает строку UPDATE
. Я пробовал перевернуть с помощью IF NOT EXISTS
с тем же результатом. Как заставить IF -ELSE работать в хранимой процедуре? Можно ли это сделать так, как я думаю, или мне нужно изучить утверждение Merge
? Я планирую запускать хранимые процедуры из простой программы Visual Basic на каждой рабочей станции. Может быть, я вхожу в заблуждение :(Жаль, что мой босс слишком скуп, чтобы просто купить решение для часов!
РЕДАКТИРОВАТЬ:
Спасибо за вашу помощь!! Я влюбился в этот сайт, вопросы получают ответы ТАК БЫСТРО!!! Вот моя рабочая хранимая процедура:
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
Это нормально или можно еще улучшить? Еще раз ВСЕМ ОГРОМНОЕ СПАСИБО!!!