【问题标题】:SSMS Stored Procedure - Update tableSSMS 存储过程 - 更新表
【发布时间】:2020-03-19 18:02:09
【问题描述】:

我在尝试在一个表中获取数据、聚合它然后将其粘贴到另一个表中时遇到了一些困难。我没有收到任何错误,但是当我单击执行时,新表中没有任何更新。我使用的是去年下载的 SSMS 版本(版本 14)。

OPEANSEAT_Hist =

  • 具有 OS_ID 的表,其中 [UPDATED_TIMESTAMP] 的多行用作版本(因此一个 OS_ID 可以在一个 不同的行)
  • 关闭日期是 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

【问题讨论】:

  • 为什么要在同一张表上使用delete语句,然后update语句?
  • 这是获取静态表进行分析的最简单方法。我知道有更好的方法,我只是想保持简单
  • 仅供参考 SSMS 只是客户端界面 - 它没有说明 SQL Server 数据库引擎的底层版本。并且不是 SP 驻留或运行的地方。
  • 很好的信息。我正在寻找的是对我的存储过程的帮助。我还是新手。有什么想法吗?
  • 当您从没有 where 子句的表中删除时......在它的末尾......该表是空的。因此,更新语句不会执行任何操作,因为没有要更新的记录。您需要的是从 openseat_hist 插入!

标签: sql-server stored-procedures ssms


【解决方案1】:

我意识到我需要执行 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多