我在触发器内部使用循环来更新MySQL数据库中的层次关系。表是INNO。
我拥有的是:
SET vDateCounter = NEW.DateTime;
麻烦的是,这只能工作一半的时间。如果UPDATE包含更新的DateTime,我的循环开始但它不会重新处理OLD.DateTime,也不会重新处理OLD.DateTime和NEW.DateTime之间的任何事件。
例如,如果我将“2015-04-20 06:00:00”更改为“2015-04-20 18:00:00”,我希望我的更新循环始终以两个日期时间的最小值开头。
我想做的是:
SET vDateCounter = (SELECT LEAST(OLD.DateTime, NEW.DateTime));
关于最佳方法的任何想法?
答案 0 :(得分:0)
你可以使用一个功能并从你的触发器调用。
CREATE FUNCTION [dbo].[FN_Least]
(
@date1 datetime,
@date2 datetime
)
RETURNS datetime
AS
BEGIN
DECLARE @vDateCounter datetime
SELECT @vDateCounter= min(dateLeast)
FROM (
SELECT @date1 AS dateLeast
UNION ALL
SELECT @date2 AS dateLeast
) AS dates
RETURN @vDateCounter
END
在触发器中,选择它。
SELECT dbo.FN_Least('2015-04-21 06:00:00','2015-04-20 18:00:00')