Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2008 - АКО НЕ СЪЩЕСТВУВА, ВМЪКНЕТЕ ДРУГА АКТУАЛИЗАЦИЯ

На пръв поглед първоначалният ви опит изглежда доста близък. Предполагам, че clockDate е поле DateTime, така че опитайте това:

IF (NOT EXISTS(SELECT * FROM Clock WHERE cast(clockDate as date) = '08/10/2012') 
    AND userName = 'test') 
BEGIN 
    INSERT INTO Clock(clockDate, userName, breakOut) 
    VALUES(GetDate(), 'test', GetDate()) 
END 
ELSE 
BEGIN 
    UPDATE Clock 
    SET breakOut = GetDate()
    WHERE Cast(clockDate AS Date) = '08/10/2012' AND userName = 'test'
END 

Имайте предвид, че getdate ви дава текущата дата. Ако се опитвате да сравните с дата (без час), трябва да направите кастинг или времевият елемент ще доведе до неуспех на сравнението.

Ако clockDate НЕ е поле за дата и час (само дата), тогава SQL машината ще го направи вместо вас - няма нужда да прехвърляте оператор set/insert.

IF (NOT EXISTS(SELECT * FROM Clock WHERE clockDate = '08/10/2012') 
    AND userName = 'test') 
BEGIN 
    INSERT INTO Clock(clockDate, userName, breakOut) 
    VALUES(GetDate(), 'test', GetDate()) 
END 
ELSE 
BEGIN 
    UPDATE Clock 
    SET breakOut = GetDate()
    WHERE clockDate = '08/10/2012' AND userName = 'test'
END 

Както други посочиха, изявлението за сливане е друг начин за справяне със същата тази логика. Въпреки това, в някои случаи, особено при големи набори от данни, операторът за сливане може да бъде непосилно бавен, причинявайки много активност в журнала за преобразуване. Така че знанието как да го логически изведете, както е показано по-горе, все още е валидна техника.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да премахнете бели интервали от низ в SQL Server

  2. Има ли начин да преминете през променлива на таблица в TSQL, без да използвате курсор?

  3. Как да зададете опцията maxrecursion за CTE вътре във функция с таблично стойност

  4. Как да съпоставите множество дялове в една файлова група в SQL Server (T-SQL)

  5. Динамично създаден SQL срещу параметри в SQL Server