Хранимая процедура SSMS - таблица обновлений - PullRequest
0 голосов
/ 19 марта 2020

Я сталкиваюсь с некоторыми трудностями при попытке собрать данные в одной таблице, объединить их, а затем вставить их в другую таблицу. Я не получаю никаких ошибок, но когда я нажимаю выполнить, в новой таблице ничего не обновляется. Я использую версию SSMS, которая была загружена в прошлом году (версия 14).

Таблица OPEANSEAT_Hist =

  • таблица с OS_ID с несколькими строками для [UPDATED_TIMESTAMP], которая служит как версии (чтобы один OS_ID мог иметь 10 временных меток в другой строке)
  • Закрытой датой является начальный [UPDATED_TIMESTAMP] OS_ID, который был закрыт (может быть несколько [UPDATED_TIMESTAMP] после его закрытия, я хочу самое раннее one.

Моя новая таблица: OPENSEAT_CloseDates

  • OS_ID - цифра c
  • CLOSE_DATE - datetime

Эта таблица должна иметь только 1 строку на OS_ID с CLOSE_DATE (или ноль, если OS_ID еще не был закрыт) * ​​1021 *

Это то, что я до сих пор:

ALTER PROCEDURE [PS_UPDATE_OPENSEAT_closedates]
AS
DELETE FROM [OPENSEAT_CloseDates]
UPDATE OPENSEAT_CloseDates

SET
    OPENSEAT_CloseDates.OS_ID = ( 
            SELECT t.OS_ID
            FROM [dbo].[OPENSEAT_Hist] t
            where t.OS_ID = OPENSEAT_Hist.OS_ID
            GROUP BY [OS_ID]),

    OPENSEAT_CloseDates.[CLOSE_DATE] = ( 
            SELECT MIN(CAST([UPDATED_TIMESTAMP] AS DATETIME))
            FROM [dbo].[OPENSEAT_Hist] s
            WHERE CLOSED_REASON IS NOT NULL AND s.OS_ID = OPENSEAT_Hist.[OS_ID]
            GROUP BY [OS_ID])

from OPENSEAT_Hist

1 Ответ

0 голосов
/ 19 марта 2020

Я понял, что мне нужно сделать INSERT вместо обновления.

ALTER PROCEDURE [dbo].[PS_UPDATE_OPENSEAT_closedates]

AS
DELETE FROM [dbo].[OPENSEAT_CloseDates]
BEGIN
    INSERT INTO OPENSEAT_CloseDates
        SELECT 
            (SELECT MIN(CAST([UPDATED_TIMESTAMP] AS DATETIME))
            FROM [dbo].[OPENSEAT_Hist]
            WHERE OPENSEAT_Hist.OS_ID = t.[OS_ID]
            GROUP BY [OS_ID]) as CLOSE_DATE, 
            t.OS_ID

            FROM [dbo].[OPENSEAT_Hist] t
            where t.CLOSED_REASON is not null
            GROUP BY OS_ID

end
...