如何在满足条件的情况下停止更新所有行

时间:2016-02-08 20:26:34

标签: sql sql-server-2008

我正在为大学工作并拥有PatientAdmissionsTbl,它将所有患者入院都存储到各个病房,并且有一个DateDischarged列,显示患者何时出院病房。

update dbo.PatientAdmissionsTbl
set DateDischarged = getdate()
where PatientID = @PatientID
and WardID = @oldWard

我使用此更新尝试更新表中符合这些条件的最后一行,我遇到的问题是它更新了患者和病房ID所在的所有行#39; s是(过去和现在)表中但是我不知道如何将其限制为更新匹配它的最后一行。

所以,我的问题是如何阻止所有行更新?

这是正在使用的表,第27-34行是重要的,当我尝试进行上面的更新时DateDischarged次数匹配,我想要的是当前时间和日期在最后一行匹配where子句和最后一行不是它上面的匹配...对不起,我不太确定如何正确地说这个

编辑:DateDischarged将为NULL,直到该患者出院,然后更新该表,并将当前日期和时间放在DateDischarged列中,其中patientid和wardid与where子句匹配

2 个答案:

答案 0 :(得分:1)

添加: and DateDischarged is null到where子句似乎修复了它,我可能使这个声音比实际上更复杂。

答案 1 :(得分:0)

SQL Server中的一种方法是将TOPORDER BY一起使用。假设您希望记录最近的日期:

with topudate as (
      select top 1 pa.*
      from dbo.PatientAdmissionsTbl pa
      where PatientID = @PatientID and WardID = @oldWard
      order by DateDischarged desc
    )
update toupdate
    set WardId = @newWard;  -- WHATEVER THE COLUMNS YOU WANT TO UPDATE WITH THEIR VALUES
相关问题