如何解决SQL Server插入具有相同日期时间的多个记录
| 我有一个表,其中有一个datetime列,希望同时插入多个记录。日期时间必须完全相同,这样我才可以比较插入的记录。做这样的事情是否足够:INSERT INTO Table(Date,ID,etc...)
VALUES (GETDATE(),...)
还是我应该在存储过程中更早地声明一个变量来保存当前时间,并将其用作要插入的值。
我已经测试过,似乎第一种方法可以正常工作,我只是想100%确定。
编辑:我认为这个问题最好用“存储过程中执行GETDATE()多久执行一次?”
解决方法
每个查询一次评估“ 1”。无需声明变量。
,是的,如果要使用该方法,请声明一个变量以保存当前时间。您还可以创建一个父记录并为其分配单个日期时间,然后将父ID写入子记录中。依靠DateTime标记可能可以正常工作,但似乎有点脏。
,将当前日期时间存储在变量中,然后在所有插入查询中使用它。
declare @now datetime
set @now = getdate()
insert into table (datecolumn) values (@now)
更新:正如Joe在接受的答案中指出的那样,每个查询对evaluated1进行一次评估,因此不必将其值捕获到变量中。但是这样做会使意图更加明显,并提高了可维护性,恕我直言。
,日期将轻松切换到新的毫秒或百分之一-取决于您的数据库。
您应该存储一个变量并重复使用。
,即使每个查询执行一次“ 4”,我在存储过程中的规则是在存储过程执行开始时获取当前日期/时间,并将其保存在“ 5”变量中(称为“ 6”)。对于整个存储过程的执行,这给了我一致的“ nowness”概念。
具有依赖于当前日期的存储过程将执行,以使执行周期跨越一天的结束,这将教给您这种方法的好处。在试图弄清楚为什么存储过程以神秘方式失败时,避免了很多混乱。
还有助于建立类似的变量,以将相关日期标记为一天的开始和结束时间:
declare
@dtNow datetime,@dtFrom datetime,@dtThru datetime
set @dtNow = current_timestamp
set @dtFrom = convert(datetime,convert(varchar,@dtNow,112),112)
set @dtThru = dateadd(ms,-3,dateadd(day,1,@dtFrom))
此技术使您可以过滤“ 5”个值以收集当天的内容(不一定实际是执行日期):
select *
from foo
where foo.dtSold between @dtFrom and @dtThru
当然,这完全取决于手头问题的实际要求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。