如何在不使用光标的情况下一次选择一个记录



我在SQL Server中有两个表。

dbo.VitalPatientDetails =>

|derationdetailsid |患者|患者名称|unitname |床位|患者|lastalarmreceivedat |

dbo.vitalalarmdetails =>

|id |DisteraDeTailsID(RefitalPatientDetails.patientdetailsid)|Vitalgeneration Time |文件名|

我需要检索DBO的所有领域。由VitalGeneration Time按升序顺序排列的DepertaLsidsID分组的VitalAlarmDetails。我已经为此编写了光标,如下所示,它正在返回多个结果集。我需要在不使用光标的情况下将其单套件进行。我只想知道我是否可以没有光标。

DECLARE @PatientDetailsId BIGINT
DECLARE @getAlarmDetails CURSOR
SET @getAlarmDetails = CURSOR FOR SELECT PatientDetailsId FROM VitalPatientDetails
OPEN @getAlarmDetails
    FETCH NEXT FROM @getAlarmDetails INTO @PatientDetailsId
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SELECT * FROM VitalAlarmDetails
        WHERE PatientDetailsId = @PatientDetailsId
        ORDER BY VitalGenerationTime ASC
        FETCH NEXT FROM @getAlarmDetails INTO @PatientDetailsId
    END
CLOSE @getAlarmDetails
DEALLOCATE @getAlarmDetails

谢谢。

尝试使用WHILE循环替换CURSOR。我在另一个问题中发布了一个示例:

SQL Server存储的过程避免光标

它将成为以下内容:

从VitalAlarmDetails中选择@patientdetailsid = min(daterdetailsid)而@patientdetailsid并非null开始   '在这里做事   从VitalAlarmDetails中选择@patientdetailsid = min(daterdetailsid),derationdetailsid> @patientdetailsid结尾

编辑:

要返回一组而不是一行返回它,请使用类似的东西:

SELECT 
    VAD.*
FROM 
VitalAlarmDetails VAD JOIN
        VitalPatientDetails VPD ON VAD.PatientDetailsId  = VPD.PatientDetailsId 

edit2:

JOIN仍未产生预期结果。建议在WHILE循环内使用温度表来存储结果。这似乎有效。

好的,所以如果我正确理解您单个结果集,由VitalGeneration Time订购(以及使用由DisteryDetailsid订购的光标?

>

之类的东西怎么样
SELECT  PatientDetailsId,
        VitalGenerationTime
FROM    VitalAlarmDetails
ORDER BY    PatientDetailsId,
            VitalGenerationTime

最新更新