Pada pandangan pertama upaya awal Anda tampaknya cukup dekat. Saya berasumsi bahwa clockDate adalah bidang DateTime jadi coba ini:
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
Perhatikan bahwa getdate memberi Anda tanggal saat ini. Jika Anda mencoba membandingkan dengan tanggal (tanpa waktu), Anda perlu mentransmisikan atau elemen waktu akan menyebabkan perbandingan gagal.
Jika clockDate BUKAN bidang datetime (hanya tanggal), maka mesin SQL akan melakukannya untuk Anda - tidak perlu menggunakan pernyataan 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
Seperti yang telah ditunjukkan orang lain, pernyataan gabungan adalah cara lain untuk mengatasi logika yang sama ini. Namun, dalam beberapa kasus, terutama dengan kumpulan data yang besar, pernyataan penggabungan bisa sangat lambat, menyebabkan banyak aktivitas tranlog. Jadi mengetahui bagaimana logikanya seperti yang ditunjukkan di atas masih merupakan teknik yang valid.