2011-04-28 58 views
0

我创建了一个触发器,用于将数据类型为time()的列的时间值设置为NULL,当它大于GETDATE()时为NULL。SQL:触发器数据类型时间和GETDATE之间的冲突()

自GETDATE()检索日期和时间以来,我得到一个错误,指示列的数据类型time()和GETDATE()之间存在冲突。

我的问题是我如何才能获得只有GETDATE()的时间部分才能在我的触发器中使用它?

触发代码:

create trigger trig1 
    on [dbo].[Products] 
    after insert 
    as 
    update Products 
    set ParkingStartTime = null 
    from Products 
    join inserted i 
    on i.ParkingStartTime = Products.ParkingStartTime 
    where i.ParkingStartTime >= GETDATE(); 

问候。

+0

有什么确切的错误信息?如果ParkingStartTime是'TIME'字段,那么确实存在冲突;你需要'CAST(GETDATE()作为时间)',并假设客户停车的日期是今天。 – 2011-04-28 20:10:00

+0

@Jon of Traders错误消息是'数据类型时间和日期时间在大于或等于运算符中不兼容。 – HShbib 2011-04-28 20:16:06

回答

2

基础上的评论,您不能隐式转换时间,日期时间 - 所以你需要将它手动转换:

 

create trigger trig1  
on [dbo].[Products] 
after insert 
as 
update Products 
set ParkingStartTime = null 
from Products 
join inserted i 
on i.ParkingStartTime = Products.ParkingStartTime  
where i.ParkingStartTime >= CAST(GETDATE() AS time(7)) 
 
0

将GetDate()转换为时间组件 - 24小时格式。

SELECT CAST(GETDATE() AS time(7)) AS 'time'