【发布时间】: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