我有在表中插入行的查询,该表具有添加触发器,当我运行此查询时,此触发器引发错误,如下所示:

问题描述 投票:0回答:1

错误

子查询返回了多个值。当子查询遵循=,!=,,> =或将子查询用作表达式时,不允许这样做。

错误号: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
sql-server tsql database-trigger
1个回答
2
投票

插入的内容可能包含很多行-这是导致错误的原因。您可能应该放弃值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

我无法告诉医生插入物与医生的关系,因此您可能需要适应您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.