我正在将数据插入表中,在插入之前我需要检查数据是否存在。
我有一个由datetime
和int
两列组成的复合键。
在插入之前,我需要检查表中是否存在具有相同时间和ID的数据。
用户插入的日期是'mm / dd / yyyy'。
表中的datetime
数据如下所示:'2016-01-12 00:00:00.000'。
id字段为int
。
所以,我有一个问题:
if not exists(select count(*) from table_1 where MyDate = @myDate and id = @id)
insert into table_1 .....
格式化用户发送的日期以匹配表格中的datetime
格式的正确方法是什么?
答案 0 :(得分:0)
检查此sqlfiddle,了解如何在查询中使用不同的日期格式。可能会帮助你解决它。
答案 1 :(得分:0)
我猜这个问题是关于SQL Server的,基于语法。代码段中的问题远远超出了日期格式。
首先,表达式:
if not exists(select count(*) from table_1 where MyDate = @myDate and id = @id)
永远不会返回true,因为子查询总是返回一行一行。如果没有匹配,则列包含0
,它确实存在。
你打算:
if not exists(select 1 from table_1 where MyDate = @myDate and id = @id)
其次,如果您明智地选择让数据库强制执行唯一性约束,则无需进行此检查。因此,在两列上定义唯一索引或约束:
create unique index unq_table_1_id_mydate on table_1(id, MyDate);
现在,数据库不允许您插入重复值,并且不需要if
。
接下来,我建议您在应用程序层修复日期格式。 YYYY-MM-DD是ISO标准日期格式,非常合理。但是,如果您不想这样做,请使用convert()
:
insert into table_1(id, MyDate, .....)
select @id, convert(datetime, @MyDate, 101), . . .
数据库中的值看起来正确存储为日期/时间值,因此这应该可以正常工作。