我正在将我的数据库从以太平洋时间存储日期时间转换为 UTC,但不会同时更改所有代码。
我正在尝试编写一个触发器,该触发器将更新在任一列中输入的时间并将它们转换并将它们插入到另一列中。
前任。如果我在 OriginalTime 列中插入太平洋时间,它应该将时间转换为 UTC 并使用 UTC 时间更新 NewTime 列。相反,如果我在 NewTime 中插入/更新值,它应该将时间转换回太平洋并将其放入 OriginalTime。
我是在循环错误还是什么?
ALTER TRIGGER tr_Calls_CreateDate ON Calls
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
DECLARE
@CallId INT,
@CreateDate DATETIME,
@CreateDateUTC DATETIME
--Create cursor
DECLARE CreateDate_Cursor CURSOR LOCAL FOR
SELECT CallId, CreateDate, CreateDateUTC FROM Inserted
OPEN CreateDate_Cursor;
-- Get First Row
FETCH NEXT FROM CreateDate_Cursor INTO @CallId, @CreateDate, @CreateDateUTC;
WHILE @@FETCH_STATUS = 0
BEGIN
IF UPDATE ([CreateDate])
BEGIN
UPDATE Calls
SET CreateDateUTC = dbo.ConvertPacificTimeToUTC(@CreateDate)
WHERE CallId = @CallId
END
IF UPDATE ([CreateDateUTC])
BEGIN
UPDATE Calls
SET CreateDate = dbo.ConvertUTCTimeToPacific(@CreateDateUTC)
WHERE CallId = @CallId
END
FETCH NEXT FROM CreateDate_Cursor INTO @CallId, @CreateDate, @CreateDateUTC;
END
-- Free Up Cursor
CLOSE CreateDate_Cursor;
DEALLOCATE CreateDate_Cursor;
END
出于某种原因,我当前的触发器正在正确输入转换后的值,但导致触发器触发的插入似乎失败了。
如果我插入一个值:
INSERT INTO Calls (CreateDate)
VALUES (GETDATE()) -- getdate currently outputs in pacific time
我得到了触发结果,但没有得到插入的值:
+-----------------+--------------------------+
| CreateDate | CreateDateUTC |
+-----------------+--------------------------+
| NULL | 2013-01-24 20:27:13.510 |
+-----------------+--------------------------+