以下是我的存儲過程。它包含子查詢有關遊標在SQL中的錯誤
Select StartTime From DrTimings Where DrID = @DrID
如果此子查詢返回多個值,則出現錯誤。子查詢返回多行。我想在遊標中獲取每個@StartTime和@EndTime。意味着我想「從醫生處取下@StTime和@EndTime」
我可以在遊標中使用兩個參數嗎?
ALTER PROCEDURE [dbo].SP_AFK_GetSlotsByDate
@DrID int,
@AppointmentDate Datetime
AS
BEGIN
Declare @StartTime Datetime
Declare @EndTime Datetime
BEGIN
SET @StartTime = (Select StartTime From DrTimings Where DrID = @DrID)
SET @EndTime = (Select EndTime From DrTimings Where DrID = @DrID)
END
DECLARE Doctor CURSOR FOR
Select StartTime from TimeList1 where StartTime>[email protected] and StartTime<@EndTime
Declare @StTime datetime
Declare @SlotID int
Declare @AppointmentTime datetime
Declare @TempSlots Table (SlotID int , AppointmentTime datetime null)
Insert into
@TempSlots
(
SlotID ,
AppointmentTime
)
values(
0,
Getdate()
)
open Doctor
fetch next from Doctor into @StTime
while @@fetch_status = 0
Begin
Select @SlotID= T.SlotId from TimeList1 T
where T.StartTime>[email protected] and T.StartTime<@EndTime and
T.SlotId not in
(Select A.SlotId from AppointmentSheet A where [email protected])
Select @AppointmentTime = Convert(varchar,right(T.StartTime,7),131)+' - '+ Convert(varchar,right(T.EndTime,7),131)
from TimeList1 T
where T.StartTime>[email protected] and T.StartTime<@EndTime and
T.SlotId not in
(Select A.SlotId from AppointmentSheet A where [email protected])
Update @TempSlots
Set SlotID = @SlotID,
[email protected]
fetch next from Doctor into @StTime
end
close Doctor
deallocate Doctor
Select * From @TempSlots
END
注意:您也可以將您的第一個BEGIN/END塊更改爲: 選擇@StartTime = StartTime,@EndTime = EndTime從DrTimings其中DrID = @DrID 不需要兩次單獨選擇。 – Brannon 2009-04-18 07:00:15