SQL:触发器数据类型时间与GETDATE()之间的冲突

时间:2011-04-28 20:00:35

标签: sql sql-server sql-server-2008

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

我收到一个错误,指示列的数据类型time()和GETDATE()之间存在冲突,因为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();

问候。

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

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

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