banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Subquery returned more than 1 value (error)  XML
  [Programming]   Subquery returned more than 1 value (error) 27/10/2008 00:31:23 (+0700) | #1 | 156691
Dragonlord
Member

[Minus]    0    [Plus]
Joined: 09/05/2007 20:39:49
Messages: 18
Offline
[Profile] [PM]
Mình chỉ hỏi 1 điều thôi, là khi viết 1 store procedure thì lấy dữ liệu ra gặp lỗi này:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Vậy cho hỏi làm cách nào giải quyết được ?

Code đây

Code:
CREATE PROCEDURE GetCarInfo
@CarBookingId int output, 
@DayRent varchar(50) output, 
@DayPickUp varchar(50) output, 
@NumberDaysRent int output, 
@CarId int output,
@Username varchar(50)
AS
SET @CarBookingId= (SELECT CarBookingId FROM CarRental WHERE Usename IN (@Username))
SET @DayRent= (SELECT DayRent FROM CarRental WHERE Usename IN (@Username))
SET @DayPickUp= (SELECT DayPickUp FROM CarRental WHERE Usename IN (@Username))
SET @NumberDaysRent= (SELECT NumberDaysRent FROM CarRental WHERE Usename IN (@Username))
SET @CarId= (SELECT CarId FROM CarRental WHERE Usename IN (@Username))
GO
[Up] [Print Copy]
  [Question]   Re: Subquery returned more than 1 value (error) 02/11/2008 15:30:37 (+0700) | #2 | 157362
[Avatar]
Z0rr0
Q+WRtaW5pc3RyYXRvc+g

Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]
Thông báo lỗi trên nói rằng một hoặc nhiều câu SELECT của bồ trả về nhiều record, trong khi các biến chỉ có thể chứa 1 giá trị. Nguyên nhân có thể là bảng CarRental có nhiều (hơn 1) record trùng Username.
Trường Username có phải là primary key (khóa chính) chưa?
Hibernating
[Up] [Print Copy]
  [Question]   Re: Subquery returned more than 1 value (error) 02/11/2008 20:23:15 (+0700) | #3 | 157369
[Avatar]
YHT
Member

[Minus]    0    [Plus]
Joined: 21/04/2006 13:29:33
Messages: 173
Location: HCM
Offline
[Profile] [PM] [WWW] [Yahoo!]
Cái stored procedure của bạn viết chưa tối ưu lắm, có qua nhiều câu truy vấn thừa, bạn sửa lại thế này xem
Code:
CREATE PROCEDURE GetCarInfo
 @CarBookingId int output, 
 @DayRent varchar(50) output, 
 @DayPickUp varchar(50) output, 
 @NumberDaysRent int output, 
 @CarId int output,
 @Username varchar(50)
 AS
SELECT  @CarBookingId=CarBookingId,@DayRent=DayRent ,@DayPickUp=DayPickUp,@NumberDaysRent=NumberDaysRent,@CarId=CarId FROM CarRental WHERE Username=@Username

Ở đây có lẽ Username là khoá chính trong bảng?
Có hai điểm bạn cần thay đổi:
- Tất cả các fields đều thuộc 1 bảng, vì vậy chỉ cần 1 câu query là có thể lấy tất cả.
- Username truyền vào chỉ có 1 giá trị nên toán tử cần dùng là = chứ không phải IN. Dùng IN về nguyên tắc vẫn cho ra kết quả đúng nhưng dùng như vậy là không thích hợp.
Bạn thử lại xem còn gì trục trặc không.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|