我有下面的存儲過程進行預留。我沒有做前端插入值,所以我使用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
子查詢'(SELECT [ reservationno ] FROM roombookingdetails)''可能會返回多於1行,應該用'MAX'這樣的集合操作替代,就像你在其他子查詢中使用的那樣 –
好的將使用那個 – saurabh64
你必須使用'where子句','Top操作符',當存在此類問題或多於1條記錄時,子查詢中的「Min,Max,Avg」 –