日期:2014-05-18  浏览次数:20666 次

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

use tempdb
go
create proc p_test
@id datetime output
as
    set @id = (select dateadd(day,2,getdate()))
go
declare @id datetime
set @id = (select getdate())
select @id
WAITFOR DELAY '00:00:05'
exec p_test @id output
select @id
go
drop proc p_test
go



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

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

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


------解决方案--------------------
SQL code
use tempdb
go
create proc p_test
@id datetime output
as
    set @id = dateadd(day, 2, isnull(@id,getdate())) -- @id传入时间,NULL取getdate()
go
declare @id datetime
set @id = (select getdate())
select @id
WAITFOR DELAY '00:00:05'
exec p_test @id output
select @id
go
drop proc p_test

------解决方案--------------------
getdate() 是不确定函数。两次执行值是不一样的,所以delay 的5秒在俩面有体现。

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

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