データベースを太平洋時間の日時の保存から UTC に移行していますが、すべてのコードを同時に変更するつもりはありません。
いずれかの列に入力された時間を更新し、それらを変換して他の列に挿入するトリガーを作成しようとしています。
元。OriginalTime 列に太平洋時間を挿入すると、時刻が UTC に変換され、NewTime 列が UTC の時刻で更新されます。逆に、NewTime の値を挿入/更新すると、時刻が Pacific に戻され、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 |
+-----------------+--------------------------+