如何更新满足SQL Server中SELECT语句内条件的特定行的值

Gay*_*ayu 5 sql sql-server sql-server-2012

我有像"床"和"PatientRecord"这样的表格.我想为病人分配一张空床(即来自Bed table的bID,状态="可用"),然后将该bID状态更改为"Occupied".请帮忙.以下是我当前的查询,但我不确定如何继续.

update Patient_Record 
set b_ID = (select top 1 b_ID from bed where Status_Avai_Occ = 'Available')
/*i want to change the status of this b_ID to "Occupied"*/
where Admission_Type = 'In Patient' 
Run Code Online (Sandbox Code Playgroud)

Dar*_*ren 0

这将更新所有 PatientRecords 并设置Admission_Type =In Patient

我不确定我是否完全理解你的结构,但你可以这样做:

DECLARE @AvailableBID INT
SELECT TOP 1 @AvailableBID = b_ID FROM bed WHERE Status_Avai_Occ = 'Available'

UPDATE Patient_Record 
SET b_ID = @AvailableBID
WHERE Admission_Type = 'In Patient'

UPDATE bed
SET Status_Avai_occ = 'Occupied'
WHERE b_ID = @AvailableBid
Run Code Online (Sandbox Code Playgroud)

请注意,这仍会更新所有 Patient_records,其中包含 Patient_Type In Patient。您将需要应用额外的过滤器,即行号。

http://sqlfiddle.com/#!6/fa26d/9

从评论中编辑

DECLARE @AvailableBID INT
DECLARE @AvailablePatientRecord INT

SELECT TOP 1 @AvailableBID = b_ID FROM bed WHERE Status_Avai_Occ = 'Available'
SELECT TOP 1 @AvailablePatientRecord  = PatientRecordId FROM Patient_Record WHERE Admission_Type = 'In Patient'

UPDATE Patient_Record 
SET b_ID = @AvailableBID
WHERE PatientRecordId = @AvailablePatientRecord

UPDATE bed
SET Status_Avai_occ = 'Occupied'
WHERE b_ID = @AvailableBid
Run Code Online (Sandbox Code Playgroud)

注意:您必须确保 Patient_Record 表中有 PatientRecordId