Данные в столбце не изменены - PullRequest
0 голосов
/ 02 мая 2010

У меня sql 2005, и когда я запускаю запрос ниже, данные из таблицы RealTimeLog переносятся в историю, но когда новые данные поступают в таблицу RealTimeLog, старые данные не изменяются на новые, что означает, что данные OutTime не изменяются с новыми данными из RealTimeLog.

INSERT INTO History
            (UserID,
             UserName,
             LogDate,
             [InTime],
             [OutTime])
SELECT UserID,
       UserName,
       [LogDate],
       CONVERT(NVARCHAR, MIN(CONVERT(DATETIME, [LogTime], 108)), 108),
       CONVERT(NVARCHAR, MAX(CONVERT(DATETIME, [LogTime], 108)), 108)
FROM   RealTimeLog
WHERE  NOT EXISTS (SELECT *
                   FROM   History H
                   WHERE  H.UserID = RealTimeLog.UserID
                          AND H.UserName = RealTimeLog.UserName
                          AND H.LogDate = RealTimeLog.LogDate)
GROUP  BY UserID,
          UserName,
          [LogDate]
ORDER  BY UserID,
          [LogDate]  

для примера.

1   Shanks  02/05/2010  9:00   10:00

, если новое Макс. Время, сгенерированное в RealtimeLog, равняется 11:00, то оно не вставляется в таблицу истории, и выходные данные остаются такими же, как указано выше.

1 Ответ

1 голос
/ 04 апреля 2011

Так как это явно в вашем состоянии, вы просто вставляете новые записи, когда оно создает новый идентификатор пользователя или новое имя пользователя или новую LogDate. В случае, если вы показываете это условие не выполняется.

Вы должны добавить условие обновления после этого для случаев, когда Журнал уже существует ... where Exists... или inner join следующим образом:

UPDATE H
SET [OutTime] = CONVERT(NVARCHAR,MAX(CONVERT(DATETIME,R.[LogTime],108)),108)
FROM History H inner join
     RealTimeLog R ON H.UserID = R.UserID
                  AND H.UserName = R.UserName
                  AND H.LogDate = R.LogDate
GROUP BY H.UserID,
         H.UserName,
         H.LogDate
HAVING [OutTime]<>CONVERT(NVARCHAR,MAX(CONVERT(DATETIME,R.[LogTime],108)),108)

В SQL Server 2008 хорошим подходом является синтаксис MERGE: http://technet.microsoft.com/en-us/library/bb510625.aspx

...