【发布时间】:2016-03-12 10:47:24
【问题描述】:
我有以下代码,我试图用它来检查一个值是否已经存储在数据库中。
IF EXISTS
(
SELECT * FROM [Clock] WHERE [clockIn] ='12/03/2016'
AND UserName = 'ROSE'
)
BEGIN
RAISERROR('CLOCK IS TRUE NOTHING MORE TO DO',16 ,1)
ROLLBACK TRAN
END
ELSE
IF NOT EXISTS
(
SELECT * FROM [Clock] WHERE [clockIn] ='12/03/2016'
AND UserName = 'ROSE'
)
BEGIN
INSERT INTO [Clock] ([clockIn], [UserName])
VALUES(GetDate(), 'Rose')
END
我不完全确定为什么这是有效的,因为它似乎总是在数据库中插入一个新行,我很困惑。我以SQL Server IF NOT EXISTS Usage? 和SQL Server 2008 - IF NOT EXISTS INSERT ELSE UPDATE 为例,作为参考。
【问题讨论】:
-
您的 ClockIn 数据类型是日期吗?如果是日期时间,那么您还将有小时、分钟等,并且您的比较将不匹配。使用特定国家/地区的日期格式是个坏主意,请改用 YYYYMMDD。
-
感谢@JamesZ 的回复。我的字段是数据类型 DATE。如果我将其转换为 datetimw 的数据类型,这将有助于解决我的问题吗?
-
您正在添加具有
getdate值的行,但尝试使用常量日期过滤器来定位它们。此外,您的日期格式不是区域安全的。试试“20160312”
标签: sql sql-server sql-server-2012