我的临时表(#temp_table_between_range
)如下所示:
我试过了
UPDATE #temp_table_between_range
SET ToDate = DateAdd(YEAR, 100, GetDate())
WHERE ToDate = (SELECT MAX(ToDate) FROM #temp_table_between_range)
但它没有修复最后一列的最后一行,它只更新了最大日期
我必须只更新最后一列的最后一行
答案 0 :(得分:1)
为了更新表的“最后”行,您需要知道或决定如何订购记录。与某些数据库不同,SQL Server没有您可以引用的基础“物理行号”。
即使它确实如此,你也不能依赖于通过INSERT ... SELECT
或SELECT ... INTO
语句(没有ORDER BY子句)每次都以相同的顺序到达时添加到表中的记录,甚至如果所有变量都相同,并且运行之间似乎没有任何变化。
因此,为了按照可靠的方式做你想做的事,你需要一些东西来排序。
让我们假设您想要按ToDate
然后FromDate
排序的示例。以下是UPDATE
语句如何工作的示例:
;
WITH cte AS
(
SELECT FromDate
, ToDate
, RecordNumber = ROW_NUMBER()
OVER (ORDER BY FromDate DESC, ToDate DESC)
FROM #temp_table_between_range
)
UPDATE cte
SET ToDate=DateAdd(YEAR, 100, GetDate())
WHERE cte.RecordNumber = 1
我假设FromDate
和ToDate
的组合在临时表中是唯一的,并且这些是临时表中的唯一列。如果您有其他列,因此可以通过某种方式告诉两个记录具有相同的FromDate
和ToDate
,您可能希望将它们添加到您的排序或WHERE
子句中。
答案 1 :(得分:-1)
请创建一个带有标识列的临时表,您可以在其中控制记录编号,如下所示
Create Table #temp_table_between_range
(
RecID INT Identity,
fromdate datetime,
todate datetime
)
并使用以下更新
declare @cnt int
set @cnt=(select MAX(RecId) from #temp_table_between_range)
update #temp_table_between_range
set ToDate=DateAdd(YEAR, 100, GetDate())
where RecId=@cnt
如果这对您有用,请告诉我