读书人

关于datetime类型作output参数时会加上

发布时间: 2012-04-17 15:06:33 作者: rapoo

关于datetime类型作output参数时会加上程序执行时间的问题

SQL code
use tempdbgocreate proc p_test@id datetime outputas    set @id = (select dateadd(day,2,getdate()))godeclare @id datetimeset @id = (select getdate())select @idWAITFOR DELAY '00:00:05'exec p_test @id outputselect @idgodrop proc p_testgo


上面的程序中,我想通过存储过程得到原有时间的两天后的时间,精确到毫秒,但是因为程序执行需要时间,比如说我在里面执行了一个WAITFOR DELAY '00:00:05' 结果得到的时间比原来的时间多少两天 再加上5秒
因为这个程序简单毫秒级不会变 但是我的实际程序运行需要几个毫秒,就像5秒延时一样

我想问的是怎么才能忽略这个因为程序运行所加的时间,就是以上程序得到的结果只再两天时间,不会加上延时的那5秒

这个只有datetime类型有这个问题 其他的类型不会有这个问题


[解决办法]
SQL code
use tempdbgocreate proc p_test@id datetime outputas    set @id = dateadd(day, 2, isnull(@id,getdate())) -- @id传入时间,NULL取getdate()godeclare @id datetimeset @id = (select getdate())select @idWAITFOR DELAY '00:00:05'exec p_test @id outputselect @idgodrop proc p_test
[解决办法]
getdate() 是不确定函数。两次执行值是不一样的,所以delay 的5秒在俩面有体现。

getdate()后一般直接存储到变量里面使用。LZ这个
WAITFOR DELAY '00:00:05'
exec p_test @id output

等待5秒后,再次的getdate()肯定是跟前面的不一样了。

读书人网 >SQL Server

热点推荐