Извиняюсь, но это вопрос двух частей.
Я чрезвычайно новичок в SQL и пытаюсь разработать приложение с часовым механизмом для небольшого офиса, в котором я работаю. Я сейчас общаюсь с бэкэндом SQL и задаю вопрос о составных операторах.
Где я застрял, если пользователь пытается выполнить синхронизацию для разрыва, но никогда не запускался в начале смены, SQL нужно создать новую строку, а не обновлять существующую.
Вот что я пробовал:
IF NOT EXISTS(SELECT * FROM Clock WHERE clockDate = '08/10/2012') AND userName = 'test')
BEGIN
INSERT INTO Clock(clockDate, userName, breakOut)
VALUES({ fn NOW() }, 'test', { fn NOW() })
END
ELSE
BEGIN
UPDATE Clock
SET breakOut = { fn NOW() }
WHERE (clockDate = '08/10/2012') AND (userName = 'test')
END
Я использую Visual Studio 2010 для этого, связанного с SQL Server Express 2008 на моей локальной машине. Я получаю сообщение об ошибке, которое говорит: "Конструкция SQL-запроса Compound не поддерживается". Однако за этим следует сообщение о том, что 1 строка была затронута, и когда я просматриваю свою таблицу Clock, она выглядит так же, как я ожидаю, что она будет выглядеть. Каков наилучший способ обмануть это?
И моя вторая часть этого вопроса находится в моих заявлениях WHERE. Есть функция, чтобы получить сегодняшнюю дату в столбце clockDate вместо того, чтобы заполнять сегодняшнюю дату? Просто пытаюсь задуматься над созданием приложения на передней панели.
IF NOT EXISTS(SELECT * FROM Clock WHERE clockDate = { fn CURRENT_DATE() }) AND userName = 'test')
Опять же, это дает мне результаты, которые я хочу, но только после получения ошибки "Ошибка в предложении WHERE рядом с" CURRENT_DATE ". Невозможно разобрать текст запроса.
Надеюсь, я объяснил это правильно, и спасибо за вашу помощь!
EDIT:
@RThomas @W00te
Хорошо, так что с clockDate как поле даты и breakOut как поле времени (0), должно ли это работать? Причина, по которой я все еще получаю "Конструкция или оператор SQL-запроса Compound, не поддерживается". Синтаксическая ошибка, даже если она работает.
IF NOT EXISTS (SELECT * FROM Clock WHERE (clockDate = GETDATE()) AND (userName = 'test'))
BEGIN
INSERT INTO Clock(clockDate, userName, breakOut)
Values(GETDATE(), 'test', GETDATE())
END
ELSE
BEGIN
UPDATE Clock
SET breakOut = GETDATE()
WHERE (clockDate = GETDATE()) AND (userName = 'test')
END
Результаты моей таблицы:
clockDate userName clockIn breakOut breakIn clockOut
08/10/2012 test NULL 11:24:38 NULL NULL
Это результат, который я хочу, но эта ошибка смущает меня. Является ли это ошибкой Visual Studio или ошибкой SQL? И я буду читать сообщения о слиянии, спасибо вам за ссылки.