#sql #sql-server #sql-server-2008
#sql #sql-сервер #sql-сервер-2008 #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();
С уважением.
Комментарии:
1. Какое точное сообщение об ошибке? Если ParkingStartTime является
TIME
полем, то действительно существует конфликт; вам нужно было быCAST(GETDATE() AS TIME)
, и это предполагает, что дата парковки клиента — сегодня.2. @ Джон на все руки Сообщение об ошибке является
The data types time and datetime are incompatible in the greater than or equal to operator.
Ответ №1:
основываясь на комментарии, вы не можете неявно преобразовать time в datetime — поэтому вам нужно преобразовать его вручную:
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))
Ответ №2:
Преобразовать GetDate() только в формат компонента time — 24Hr.
SELECT CAST(GETDATE() AS time(7)) AS 'time'