我有下面的存储过程进行预留。我没有做前端插入值,所以我使用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” –