#asp.net #sql #sql-server #tsql
#asp.net #sql #sql-сервер #tsql
Вопрос:
Я хотел бы знать, как проверить, превышает ли временная метка в (столбец startTime) системное время. Если больше, то следует сбросить временную метку на NULL
Есть ли способ сделать это?
С уважением.
Комментарии:
1. Вы используете MySQL или SQLServer? Вы хотите, чтобы это было частью запроса или процедуры? Все это есть в ваших тегах.
2. Я использую SQLServer. И я не уверен, какой вариант является наилучшим. Но он (запрос или процедура) должен запускаться каждый раз, когда вставляется запись.
3. Возможно, вы захотите изучить триггеры, триггер BEFORE INSERT…
Ответ №1:
В MySQL вы могли бы попробовать:
UPDATE table SET time = NULL
WHERE time>NOW()
Если вы хотите, чтобы это было автоматически, попробуйте это:
CREATE TRIGGER upd BEFORE INSERT ON `table`
FOR EACH ROW BEGIN
IF NEW.time>NOW() THEN SET NEW.time=NULL; END IF;
END;
Ответ №2:
update table set ts_field = null where ts_field > now()
это для mysql
Ответ №3:
Declare @Now datetime = GETDATE()
Update tbl Set
StartTime=NULL
Where StartTime > @Now
Комментарии:
1. как я могу заставить это выполняться каждый раз, когда вставляется запись
Ответ №4:
create trigger tbl_reset_date
on tbl
after insert
as
update t
set time = null
from tbl t
join inserted i
on i.id = t.id
where i.time > getdate();
Комментарии:
1. Слишком много Pascal / Delphi (или где еще вы используете
nil
)? 🙂2. что вы подразумеваете под этим на i.id = t.id Имя моей таблицы — Product, а имя столбца, в котором указано время, называется Ptime. не могли бы вы соответствующим образом отредактировать код, я немного запутался. С уважением
3. Просто замените id на любой первичный ключ таблицы. Может быть, product_id?
Ответ №5:
Попробуйте…
CREATE TRIGGER tr_Product_InsteadOfTrigger
ON Product
INSTEAD OF INSERT
AS
IF @@ROWCOUNT > 0 -- limit nested recursion if no work to do
BEGIN
SET NOCOUNT ON;
INSERT INTO Product
(
ProductId,
PTime
)
SELECT
i.ProductId,
CASE
WHEN i.PTime > GETUTCDATE()
THEN NULL
ELSE i.PTime
END
FROM
inserted i
END -- if work to do
GO