PDA

View Full Version : پروسیجر برای نمایش اولین تصویر هر البوم...؟



FM.ALPACHINO
دوشنبه 06 دی 1389, 10:09 صبح
سلام دوستان
دو جدول photos و albums دارم .می خواهم پروسیجری داشته باشم که بتونه تصویر اول هر البوم رو به همراه نام البوم و albumid (برای نشان دادن تصاویر بیشتر البوم )به من بر گردونه.من از این query استفاده کردم که 3 رکورد رو بر میگردونه همون چیزی که می خوام

select Albums.AlbumID,ALBUMS.Category,tmp.Caption from Albums
cross apply
(select top 1 Caption from Photos p
where p.AlbumID= Albums.AlbumID
order by P.AlbumID)tmp

و اما sproc :

create PROC USP_GETFirstPhoto
@ALBUMID INT OUTPUT,
@CATEGORY NVARCHAR(50) OUTPUT ,
@CAPTION NVARCHAR(50) OUTPUT
AS
SELECT @ALBUMID = A.AlbumID,@CATEGORY=A.Category,@CAPTION=TMP.Captio n FROM Albums A
CROSS APPLY
( SELECT top 1 * FROM Photos
WHERE AlbumID=A.AlbumID
)TMP
order by A.AlbumID

DECLARE @x INT,@y NVARCHAR(50),@z NVARCHAR(50)
EXEC USP_GETFirstPhoto @x output,@y output,@z output
select @x,@y,@z

وقتی این پروسیجر را اجرا می کنم فقط یک رکورد به من نشون می ده در حالی که من فعلا 3 رکورد مد نظرم است .چرا فقط یک رکورد بر گردانده می شه؟چگونه می توانم از این پروسیجر اسکیما بگیرم؟
در هر دو جدول داده کافی هست.
لظفا راهنمایی کنید .اگر خودتون می خواستید این کار رو انجام بدید چه کار می کردید؟
با تشکر

sajjadrazmi
دوشنبه 06 دی 1389, 11:47 صبح
سلام
خروجی که شما از پروسیجر میگیرید، سه تا متغیر هستن. مطمئنا نمیتونید همزمان سه مقدار رو در یک متغیر ذخیره کنید. واسه همین خروجی رو باید در قالب یه table برگردونید. یعنی خروجی تون باید متغیری از نوع table باشد. بعد تو سمت app هم تمام رکوردهای اون را نشون بدین.

FM.ALPACHINO
دوشنبه 06 دی 1389, 17:35 عصر
سلام
خروجی که شما از پروسیجر میگیرید، سه تا متغیر هستن. مطمئنا نمیتونید همزمان سه مقدار رو در یک متغیر ذخیره کنید. واسه همین خروجی رو باید در قالب یه table برگردونید. یعنی خروجی تون باید متغیری از نوع table باشد. بعد تو سمت app هم تمام رکوردهای اون را نشون بدین.
خوب دوست عزیز یه مثال کوچیک بزن چه طوری اینکار رو انجام بدم
کلا بهتره برای داشتن چنین نتیجه ای از پروسیجر استفاده کنم یا تابع؟

با تشکر