簡體   English   中英

SSMS 存儲過程 - 更新表

[英]SSMS Stored Procedure - Update table

我在嘗試在一個表中獲取數據、聚合它,然后將其粘貼到另一個表中時遇到了一些困難。 我沒有收到任何錯誤,但是當我單擊執行時,新表中沒有任何更新。 我正在使用去年下載的 SSMS 版本(版本 14)。

OPEANSEAT_Hist =

  • 帶有 OS_ID 的表,其中 [UPDATED_TIMESTAMP] 的多行用作版本(因此一個 OS_ID 可以在另一行上有 10 個時間戳)
  • 關閉日期是 OS_ID 關閉的初始 [UPDATED_TIMESTAMP](關閉后可能有多個 [UPDATED_TIMESTAMP],我想要最早的一個。

我的新表: OPENSEAT_CloseDates

  • OS_ID - 數字
  • CLOSE_DATE - 日期時間

這個表應該只有 1 行每個 OS_ID 和 CLOSE_DATE(如果 OS_ID 尚未關閉,則為 null)

這是我到目前為止:

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

我意識到我需要做 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM