子查询返回了 1 个以上的值。当子查询跟在 =,.. 或子查询用作表达式时,这是不允许的

Subquery returned more than 1 value. This is not permitted when the subquery follows =,.. or when the subquery is used as an expression

我有以下存储过程来进行预订。我没有完成插入值的前端,所以我使用 sql 服务器菜单中的执行存储过程来插入数据库,但是它给我 subquery returned more than 1 value and 1 row affected 消息

ALTER PROCEDURE [dbo].[Usp_makereservation] 
  --roombookingdetails 
  @refno             VARCHAR(50), 
  @propertyid     int, 
  @roomtype          VARCHAR(3), 
  @groupcode         VARCHAR(30), 
  @companycode       VARCHAR(10), 
  @arrivaldate       DATETIME, 
  @arrivalplan       VARCHAR(3), 
  @departuredate     DATETIME, 
  @departureplan     VARCHAR(3), 
  @createdby         INT, 

  --roombookingguestdetails 
  @subsrno           VARCHAR(50), 
  @roomno            VARCHAR(30), 
  @guesttitle        VARCHAR(30), 
  @lname             VARCHAR(50), 
  @fname             VARCHAR(50), 
  @mname             VARCHAR(50), 
  @address           VARCHAR(100), 
  @city              VARCHAR(30), 
  @state             VARCHAR(30), 
  @country           INT, 
  @zipcode           VARCHAR(50), 
  @telno             VARCHAR(15), 
  @mobile            VARCHAR(15), 
  @fax               VARCHAR(50), 
  @gueststatus       INT, 
  @designation       VARCHAR(50), 
  @occupation        VARCHAR(50), 
  @arrivalfrom       VARCHAR(50), 
  @departureto       VARCHAR(50), 
  @leader            BIT, 
  @spclinstrctn      VARCHAR(1000), 
  @checkinflg        BIT, 

  --roombookingoccupancy 
  @singlebooked      INT, 
  @singleprovisional INT, 
  @singleconfirmed   INT, 
  @singlewaitlisted  INT, 
  @doublebooked      INT, 
  @doubleprovisional INT, 
  @doubleconfirmed   INT, 
  @doublewaitlisted  INT, 
  @triplebooked      INT, 
  @tripleprovisional INT, 
  @tripleconfirmed   INT, 
  @triplewaitlisted  INT, 
  @quadbooked        INT, 
  @quadprovisional   INT, 
  @quadconfirmed     INT, 
  @quadwaitlisted    INT, 
  @marketsegID       INT, 
  @businesssrcID     INT, 
  @guestcategoryID   INT, 
  @gueststatusID     INT, 
  @totalpax          INT, 
  @adultpax          INT, 
  @childpax          INT, 
  @infantpax         INT, 
  @extraadultpax     INT, 
  @extrachildpax     INT, 
  @complementarypax  INT, 
  @noshow            INT, 
  @checkinrooms      INT, 
  @checkinpax        INT 
AS 
  BEGIN 
      BEGIN try 
          BEGIN TRAN 

          INSERT INTO roombookingdetails 
                      (reservationno, 
                       srno, 
                       refno, 
                       propertyid, 
                       roomtype, 
                       groupcode, 
                       companycode, 
                       arrivaldate, 
                       arrivalplan, 
                       depaturedate, 
                       depatureplan, 
                       createdon, 
                       createdby) 
          VALUES      ((SELECT Isnull(Max(reservationno) + 1, 1) 
                        FROM   roombookingdetails), 
                       (SELECT Isnull(Max(srno) + 1, 1) 
                        FROM   roombookingdetails), 
                       @refno, 
                       @propertyid, 
                       @roomtype, 
                       @groupcode, 
                       @companycode, 
                       @arrivaldate, 
                       @arrivalplan, 
                       @departuredate, 
                       @departureplan, 
                       Getdate(), 
                       @createdby) 

          INSERT INTO roombookingguestdetails 
                      (reservationno, 
                       srno, 
                       subsrno, 
                       roomno, 
                       guesttitle, 
                       lastname, 
                       firstname, 
                       midname, 
                       [address], 
                       city, 
                       [state], 
                       country, 
                       zipcode, 
                       telno, 
                       mobile, 
                       fax, 
                       gueststatus, 
                       designation, 
                       occupation, 
                       arrivalfrom, 
                       depatureto, 
                       leader, 
                       specialinstruction, 
                       checkinflag, 
                       createdon, 
                       createdby) 
          VALUES      ((SELECT [reservationno] 
                        FROM   roombookingdetails), 
                       (SELECT Isnull(Max(srno) + 1, 1) 
                        FROM   roombookingguestdetails), 
                       @subsrno, 
                       @roomno, 
                       @guesttitle, 
                       @lname, 
                       @fname, 
                       @mname, 
                       @address, 
                       @city, 
                       @state, 
                       @country, 
                       @zipcode, 
                       @telno, 
                       @mobile, 
                       @fax, 
                       @gueststatus, 
                       @designation, 
                       @occupation, 
                       @arrivalfrom, 
                       @departureto, 
                       @leader, 
                       @spclinstrctn, 
                       @checkinflg, 
                       Getdate(), 
                       @createdby) 

          INSERT INTO roombookingoccupancy 
                      (reservationno, 
                       srno, 
                       singlebooked, 
                       singleprovisional, 
                       singleconfirmed, 
                       singlewaitlisted, 
                       doublebooked, 
                       doubleprovisional, 
                       doubleconfirmed, 
                       doublewaitlisted, 
                       tripplebooked, 
                       trippleprovisional, 
                       trippleconfirmed, 
                       tripplewaitlisted, 
                       quadbooked, 
                       quadprovisional, 
                       quadconfirmed, 
                       quadwaitlisted, 
                       marketsegmentid, 
                       businesssourceid, 
                       guestcategoryid, 
                       gueststatusid, 
                       totalpax, 
                       adultpax, 
                       childpax, 
                       infantpax, 
                       extraadultpax, 
                       extrachildpax, 
                       complementrypax, 
                       noshow, 
                       checkinrooms, 
                       checkinpax, 
                       createdon, 
                       createdby) 
          VALUES      ((SELECT [reservationno] 
                        FROM   roombookingdetails), 
                       (SELECT Isnull(Max(srno) + 1, 1) 
                        FROM   roombookingoccupancy), 
                       @singlebooked, 
                       @singleprovisional, 
                       @singleconfirmed, 
                       @singlewaitlisted, 
                       @doublebooked, 
                       @doubleprovisional, 
                       @doubleconfirmed, 
                       @doublewaitlisted, 
                       @triplebooked, 
                       @tripleprovisional, 
                       @tripleconfirmed, 
                       @triplewaitlisted, 
                       @quadbooked, 
                       @quadprovisional, 
                       @quadconfirmed, 
                       @quadwaitlisted, 
                       @marketsegID, 
                       @businesssrcID, 
                       @guestcategoryID, 
                       @gueststatusID, 
                       @totalpax, 
                       @adultpax, 
                       @childpax, 
                       @infantpax, 
                       @extraadultpax, 
                       @extrachildpax, 
                       @complementarypax, 
                       @noshow, 
                       @checkinrooms, 
                       @checkinpax, 
                       Getdate(), 
                       @createdby) 

          COMMIT TRAN 
      END try 

      BEGIN catch 
          PRINT 'Rollback' 
            SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage;

          ROLLBACK 
      END catch 
  END 

这是选择 execute stored procedure 命令后生成的查询

DECLARE @return_value int

EXEC    @return_value = [dbo].[Usp_makereservation]
        @refno = N'12',
        @propertyid = 2,
        @roomtype = N'R345',
        @groupcode = N'G25',
        @companycode = N'C422',
        @arrivaldate = N'1/2/3',
        @arrivalplan = N'fd',
        @departuredate = N'5/2/3',
        @departureplan = N'gdfgd',
        @createdby = 1,
        @subsrno = N'g',
        @roomno = N'fgd',
        @guesttitle = N'fdf',
        @lname = N'gdf',
        @fname = N'f',
        @mname = N'd',
        @address = N'dfg',
        @city = N'fdg',
        @state = N'fd',
        @country = 3,
        @zipcode = N'rt',
        @telno = N'etr',
        @mobile = N'et',
        @fax = N'r',
        @gueststatus = 4,
        @designation = N'ertre',
        @occupation = N'tert',
        @arrivalfrom = N'ret',
        @departureto = N'ret',
        @leader = 1,
        @spclinstrctn = N'er',
        @checkinflg = 1,
        @singlebooked = 2,
        @singleprovisional = 2,
        @singleconfirmed = 3,
        @singlewaitlisted = 2,
        @doublebooked = 23,
        @doubleprovisional = 2,
        @doubleconfirmed = 3,
        @doublewaitlisted = 23,
        @triplebooked = 23,
        @tripleprovisional = 23,
        @tripleconfirmed = 23,
        @triplewaitlisted = 23,
        @quadbooked = 2,
        @quadprovisional = 3,
        @quadconfirmed = 24,
        @quadwaitlisted = 23,
        @marketsegID = 432,
        @businesssrcID = 4,
        @guestcategoryID = 234,
        @gueststatusID = 234,
        @totalpax = 234,
        @adultpax = 23,
        @childpax = 4,
        @infantpax = 234,
        @extraadultpax = 23,
        @extrachildpax = 4234,
        @complementarypax = 23,
        @noshow = 4,
        @checkinrooms = 234,
        @checkinpax = 43232

SELECT  'Return Value' = @return_value

GO

您的以下语句可能 returns 不止一个值。 请检查。

> SELECT [reservationno]  FROM   roombookingdetails

您已经在插入语句中使用了它。

当存在此类问题或存在超过 1 条记录时,您必须在子查询中使用where clauseTop operatorMin,Max,Avg

替换第一个插入的(SELECT [reservationno] FROM roombookingdetails)

有了这个 (SELECT Isnull(Max(reservationno) + 1, 1) FROM roombookingguestdetails)

和这个 (SELECT [reservationno] FROM roombookingdetails) 来自第二个插入

用这个(SELECT Isnull(Max(reservationno) + 1, 1) FROM (RoomBookingOccupancy)

解决了我的问题