2015-05-29 65 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

相關問題