- 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()肯定是跟前面的不一样了。