错误
子查询返回了多个值。当子查询遵循=,!=,,> =或将子查询用作表达式时,不允许这样做。
错误号:512错误严重度:16错误状态:1
错误过程:AddBookingSlots
代码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[AddDoctorBookingSlots]
ON [dbo].[BookingDay]
AFTER INSERT AS
BEGIN
DECLARE @starttime AS DATETIME = (SELECT MyDateTime1 = CAST([Day] AS DATETIME) + CAST(DayFrom AS DATETIME)
FROM INSERTED)
DECLARE @endtime AS DATETIME = (SELECT MyDateTime1 = CAST([Day] AS DATETIME) + CAST(DayTo AS DATETIME)
FROM INSERTED)
DECLARE @waitingtime AS INT = (SELECT WaitingTime FROM INSERTED)
WHILE (@starttime <= @endtime)
BEGIN
INSERT INTO [dbo].[Booking] ([DoctorID], [Day], [Time], [Fees], [Valid],
[PatientPhone], [BookingDayID],[PatientName], [PatientEmail],
[NoShow], [PackageID], [IsFree],[IsEditable],
[Shift], [CancelledByDoctor],[CancelledByUser],
[UserId], [UpdatedBy])
VALUES ((SELECT DoctorID FROM INSERTED),
(SELECT [Day] FROM INSERTED),
(SELECT CONVERT(CHAR(5), @starttime, 108)),
(SELECT ExaminationFees FROM Doctor
WHERE DoctorID = (SELECT DoctorID FROM INSERTED)), 1, NULL,
(SELECT BookingDayID FROM INSERTED), NULL, NULL, 0,
(SELECT [SubscribtionPackage] FROM Doctor
WHERE DoctorID = (SELECT DoctorID FROM INSERTED)), 0, 0,
(SELECT [Shift] FROM INSERTED), 0, 0,
(SELECT UserId FROM INSERTED),
(SELECT UpdatedBy FROM INSERTED))
SET @starttime = DATEADD(minute, @waitingtime, @starttime)
END
END
插入的内容可能包含很多行-这是导致错误的原因。您可能应该放弃值insert方法,并用select insert方法替换,可能是这样
SELECT I.DoctorID
,i.[Day]
, convert(char(5), @starttime, 108)
,d.ExaminationFees
,1
,null
,i.BookingDayID
,null
,null
,0
,d.[SubscribtionPackage]
,0
,0
,i.[Shift]
,0,0,
i.UserId,
i.UpdatedBy
From INSERTED i
join doctor d on d.DoctorID=i.doctorid
我无法告诉医生插入物与医生的关系,因此您可能需要适应您的需求。