2015-05-29 67 views
-3

我有下面的存储过程进行预留。我没有做前端插入值,所以我使用execute从SQL Server菜单存储过程来插入到数据库中,但它给我的subquery returned more than 1 value and 1 row affected消息子查询返回的值超过1。当子查询跟在=,..或子查询用作表达式时,这是不允许的。

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 
+0

子查询'(SELECT [ reservationno ] FROM roombookingdetails)''可能会返回多于1行,应该用'MAX'这样的集合操作替代,就像你在其他子查询中使用的那样 –

+0

好的将使用那个 – saurabh64

+0

你必须使用'where子句','Top操作符',当存在此类问题或多于1条记录时,子查询中的“Min,Max,Avg” –

回答

-1

从第一插入更换此(SELECT [reservationno] FROM roombookingdetails)

与此 (SELECT Isnull(Max(reservationno) + 1, 1) FROM roombookingguestdetails)

(SELECT [reservationno] FROM roombookingdetails)从二次插入

与此(SELECT Isnull(Max(reservationno) + 1, 1) FROM (RoomBookingOccupancy)

解决我的问题

1

后生成的查询有chanch你下面的语句可能返回超过单个VA略。 请检查。

> SELECT [reservationno] FROM roombookingdetails 

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

0

如果存在此类问题或存在多条记录,则必须在子查询中使用where clauseTop operator,Min,Max,Avg

相关问题