标签: sysdatetime

SQL Server 中 SYSDATETIME 数据类型的准确性

我已经在 SQL Server 2008 的存储过程中使用 SYSDATETIME 进行了一些测试。我已经设置了一个带有 IDENTITY 字段的 datetime2(7) 表。

我了解这种数据类型的精度和准确度之间的区别,但是,在从这个例子中插入多条记录时,我注意到一个不寻常的结果:

declare @counter int
    set @counter = 0
    while @counter < 100000
    begin
      set @counter = @counter + 1
        INSERT INTO t ([now]) VALUES (SYSDATETIME())
    end
Run Code Online (Sandbox Code Playgroud)

我循环使用插入语句 100,000 来确定 SYSDATETIME 是否按预期正常工作。但是,与 GETDATE 相比,它似乎并不准确。

2015-12-01 19:16:58.4102452
2015-12-01 19:16:58.4102452
2015-12-01 19:16:58.4112452
2015-12-01 19:16:58.4112452
2015-12-01 19:16:58.4122453
2015-12-01 19:16:58.4122453
2015-12-01 19:16:58.4132453
2015-12-01 19:16:58.4152455
2015-12-01 19:16:58.4152455
2015-12-01 19:16:58.4162455
2015-12-01 19:16:58.4162455
2015-12-01 19:16:58.4172456
2015-12-01 19:16:58.4172456
2015-12-01 19:16:58.4182456
2015-12-01 19:16:58.4182456
2015-12-01 19:16:58.4192457
2015-12-01 19:16:58.4192457
2015-12-01 19:16:58.4202457 …
Run Code Online (Sandbox Code Playgroud)

sql-server getdate datetime2 sql-server-2008 sysdatetime

5
推荐指数
1
解决办法
486
查看次数

SYSDATETIME()的成本是否高于GETDATE()?

我有没有理由每次都停止使用SYSDATETIME()而不是GETDATE()?

难道他们都不问cpu是什么时候,或者sysdatetime需要更多指令来计算分数?Getdate是否正在进行四舍五入?sysdatetime可以更快,因为它不能进行舍入吗?

如果我不存储纳秒,我显然不会使用sysdatetime,但我问的是存储大小以外的成本.(我正在开发的当前应用程序每秒运行sysdatetime()至少280次)

sql t-sql sql-server datetime sysdatetime

3
推荐指数
2
解决办法
5290
查看次数

SELECT语句中的日期始终相同

我正在尝试将一个表中的数据插入到具有双列键的表中.源表不共享目标的密钥.目标中的两个键列都是varchars.

我有一个插入声明:

INSERT INTO Table1 (Invoice, DetailLine, SomeData1, SomeData2) 
SELECT ('1'+RIGHT('00000000000000' + CONVERT(varchar, DatePart(ns,SYSDATETIME()), 14), 0, 'STARTING_VALUE_1407', [ActualValue] 
FROM Table2;
Run Code Online (Sandbox Code Playgroud)

当我执行上面的操作时,我的DateTime2对象的毫秒数都是相同的,好像它只评估该值一次.这使我无法将其用作临时唯一键.是否可以在SELECT语句中使用SYSDATETIME()或任何其他日期函数,并为每行重新评估值?如果没有,在选择通常不共享目标表键的数据时,是否有办法在执行INSERT INTO SELECT时生成唯一值?

sql sql-server select sysdatetime

2
推荐指数
1
解决办法
125
查看次数

为什么GETDATE()和SYSDATETIME()之间的Datediff在几毫秒内总是不同?

我试图让Datediff之间GETDATE()SYSDATETIME()以毫秒为单位.

SELECT DATEDIFF(ms, GETDATE() , SYSDATETIME());        
Run Code Online (Sandbox Code Playgroud)

我得到的结果是0123.造成这种差异的原因是什么?

看到这个小提琴.

datediff getdate sql-server-2008 sysdatetime

0
推荐指数
1
解决办法
6638
查看次数