问题描述: 在 2000里面 想跟踪一个存储过程 每次的用时 ,所以在 存储过程开始的时候 用 getdate()记录开始时间
在结束的时候也用getdate()记录 结束时间,最后发现两个时间 始终是一样的,所以 建立了一个测试数据,结果果然是如此
但是在 2008 里面 是不一样,有哪位知道怎么弄啊,
脚本如下
- SQL code
use tempdb if OBJECT_ID('tb') is not null drop table tbgocreate table tb(b datetime,e datetime,id int)goinsert into tb(b,id)select GETDATE(),1update tb set e=GETDATE() where id=1select * from tbdrop 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 tbinsert into tb(b,id)select GETDATE(),1WAITFOR DELAY '00:00:01'update tb set e=GETDATE() where id=1
------解决方案--------------------
我在2008 r2上测了,其实2008r2也会有好几次存在一样的时间,如果你的操作太短以至少于0.003秒,那么SQLServer的datetime类型无法识别出来的。我把你的脚本改成datetime2之后,就可以看到差别了。但是也是刚好0.003秒,所以估计是getdate函数的问题
------解决方案--------------------
这个跟电脑反应速度有关,你多执行几次就会出现一样和不一样了
没有什么好神奇的,结贴吧