PDA

View Full Version : سوال: Subquery returned more than 1 value



Hope22
دوشنبه 29 مهر 1387, 21:03 عصر
این تریگر وقتی می خواد خط آخر رو اجرا کنه به مشکل می خوره



AlterTRIGGER [InsertConsult]
ON Consult
FORINSERT
AS
declare @max2 int
set @max2 =(selectdistinctMax(ID)From Consult)
declare @cn varchar(20)
set @cn=(selectdistinct inserted.Category FROM inserted)
declare @max int
set @max=(SELECTdistinctMax(Row)FROM Consult where(Category = @cn))+1
declare @s int
set @s =(selectdistinct Row From Consult where(Category = @cn))
if @s isnull
Update Consult set Row=1 where(ID = @max2)
Else
Update Consult set Row=@max where(Category = @cn)AND(ID = @max2 );





Error :
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Warning: Null value is eliminated by an aggregate or other SET operation.
The statement has been terminated.

کمک

shahab_ksh
دوشنبه 29 مهر 1387, 21:43 عصر
وقتی این خطا رخ میده که بیشتر از یک سطر رو بر میگردونه برای متغیری که فقط باید یک سطر یا داده براش برگرده به دستورات Select با دقت نگاه کن و به بانک اطلاعات و مقادیر برگشتی تا مشکل رو پیدا کنی

حامد مصافی
دوشنبه 29 مهر 1387, 21:54 عصر
در خط زیر cn باید یک مقدار رشته ای بگیرید اما در عمل تبدیل به یک جدول یک ستونی می شود

set @cn=(selectdistinct inserted.Category FROM inserted)داده های Consult.Category هم امیدوارم منحصر بفرد باشند

Amir_Safideh
سه شنبه 30 مهر 1387, 16:28 عصر
همون طور که دوستمون در پست سه گفتن شما باید دقیقا یک مقدار رو به متغییرتون بدید در حالی که دستور DISTINCT میاد و ستون مورد نظرت رو از نظر تکرار داده چک میکنه . یعنی اگر توی ستونت ده بار نام امیر و سی بار نام حسن تکرار شده باشد خروجی DISTINCT خواهد بود : یک بار نام امیر و یک بار نام حسن . پس عملا میبنید که خروجی این دستور SELECT شما بیشتر از یک مقدار هستش . حالا قضاوت با خودت که چطور چندین مقدار رو در یک متغییر بریزید .
-------------
موفق باشید .