日期:2014-05-17  浏览次数:20389 次

getdate()函数
问题描述: 在 2000里面 想跟踪一个存储过程 每次的用时 ,所以在 存储过程开始的时候 用 getdate()记录开始时间
在结束的时候也用getdate()记录 结束时间,最后发现两个时间 始终是一样的,所以 建立了一个测试数据,结果果然是如此
但是在 2008 里面 是不一样,有哪位知道怎么弄啊,
脚本如下

SQL code


use tempdb  
if OBJECT_ID('tb') is not null drop table tb
go
create table tb
(b datetime,
e datetime,
id int
)
go

insert into tb(b,id)
select GETDATE(),1
update tb set e=GETDATE() where id=1

select * from tb
drop table tb



在2008 得到的 结果
b e id
----------------------- ----------------------- -----------
2012-10-31 12:38:18.703 2012-10-31 12:38:18.710 1
但是在 2000里面 
b e id
----------------------- ----------------------- -----------
2012-10-31 12:38:19.706 2012-10-31 12:38:19.706 1


------解决方案--------------------
DECLARE @BEGINDATE DATETIME
SET @BEGINDATE=GETDATE()
EXEC ....
DECLARE @ENDDATE DATETIME
SET @ENDDATE=GETDATE()

SELECT DATEDIFF(MS,@BEGINDATE,@ENDATE)
------解决方案--------------------
只能说明sqlserver08太快了,或者是硬件环境有差异

SQL code

--试试到底有没有时间差,WAITFOR 后有,那就证明不在WAITFOR的时候时间这两句sql的时间差太小了
truncate table tb
insert into tb(b,id)
select GETDATE(),1
WAITFOR DELAY '00:00:01'
update tb set e=GETDATE() where id=1

------解决方案--------------------
我在2008 r2上测了,其实2008r2也会有好几次存在一样的时间,如果你的操作太短以至少于0.003秒,那么SQLServer的datetime类型无法识别出来的。我把你的脚本改成datetime2之后,就可以看到差别了。但是也是刚好0.003秒,所以估计是getdate函数的问题
------解决方案--------------------
这个跟电脑反应速度有关,你多执行几次就会出现一样和不一样了

没有什么好神奇的,结贴吧