2011-04-28 25 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'