子查询返回了 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 clause
、Top operator
、Min,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)
解决了我的问题
我有以下存储过程来进行预订。我没有完成插入值的前端,所以我使用 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 clause
、Top operator
、Min,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)
解决了我的问题