简体   繁体   English

SSMS 存储过程 - 更新表

[英]SSMS Stored Procedure - Update table

I'm running into some difficulty trying to take data in one table, aggregate it, and then paste it into another table.我在尝试在一个表中获取数据、聚合它,然后将其粘贴到另一个表中时遇到了一些困难。 I'm not getting any errors, but when I click execute, nothing updates in the new table.我没有收到任何错误,但是当我单击执行时,新表中没有任何更新。 I'm using a version of SSMS that was downloaded last year (version 14).我正在使用去年下载的 SSMS 版本(版本 14)。

Table OPEANSEAT_Hist =OPEANSEAT_Hist =

  • table with OS_ID with multiple rows for [UPDATED_TIMESTAMP] that serves as versions (so one OS_ID could have 10 timestamps on a different row)带有 OS_ID 的表,其中 [UPDATED_TIMESTAMP] 的多行用作版本(因此一个 OS_ID 可以在另一行上有 10 个时间戳)
  • Closed date is the initial [UPDATED_TIMESTAMP] the OS_ID was closed (there could be multiple [UPDATED_TIMESTAMP] after it was closed, I want the earliest one.关闭日期是 OS_ID 关闭的初始 [UPDATED_TIMESTAMP](关闭后可能有多个 [UPDATED_TIMESTAMP],我想要最早的一个。

My new table: OPENSEAT_CloseDates我的新表: OPENSEAT_CloseDates

  • OS_ID - numeric OS_ID - 数字
  • CLOSE_DATE - datetime CLOSE_DATE - 日期时间

This table should only have 1 row per OS_ID with the CLOSE_DATE (or null if the OS_ID has not yet been closed)这个表应该只有 1 行每个 OS_ID 和 CLOSE_DATE(如果 OS_ID 尚未关闭,则为 null)

This is what I have so far:这是我到目前为止:

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

I realized I need to do INSERT instead of an update.我意识到我需要做 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