PDA

View Full Version : آیا در یک storeprocedure می شه دوتا مقدار رو return کرد ؟



Microsoft.net
جمعه 10 مهر 1383, 09:03 صبح
من یک استور پروسیجر نوشتم که یک مقدار رو بر می گردونه آیا میشه دوتا مقدار return بشه چجوری ؟ ممنونم

AminSobati
جمعه 10 مهر 1383, 12:09 عصر
دوست عزیزم،
زمانیکه از Return Value استفاده میکنین، فقط یک عدد Integer برگردونده میشه. طبق روال معمول، این عدد صرفا برای این هست که Stored Procedure به Caller اعلام کنه آیا اجرا موفقیت آمیز بود یا خطایی رخ داده. مثلا تصمیم میگیرین عدد 0 به معنی پایان یافتن Procedure بدون خطا، 1 یعنی خطا در فلان قسمت Procedure، عدد 2 به معنی...
ولی برگردوندن مقدار واقعی، توسط Ouput Parameter انجام میشه. به عنوان مثال در این Procedure من دو مقدار رو به Caller برمیگردونم:


CREATE PROC Test
@MyInputParam INT,
@MyOutput1 VARCHAR(20) OUTPUT,
@MyOutput2 VARCHAR(20) OUTPUT
AS
SET @MyOutput1='Hello'
SET @MyOutput2='World'
--Do nothing with @MyInputParam
GO

ضمنا پارامتر اولی ازش استفاده نمیشه، فقط برای این وجود داره که بدونین نیازی نیست الزاما همه پارامترها Input یا همگی Output باشن. حالا برای Call کردن:


DECLARE @Var1 VARCHAR(20)
DECLARE @Var2 VARCHAR(20)
EXEC Test 1, @Var1 OUTPUT, @Var2 OUTPUT
PRINT @Var1 + ' ' + @Var2

همونطور که ملاحظه میفرمایید باید دو متغیر رو به Procedure ارسال کنیم (با قید اینکه اینها output قراره داشته باشن). هر مقداری در Procedure برای این دو پارامتر قرار بگیره، ما به عنوان Caller، اون مقادیر رو به واسطه متغیرها دریافت میکنیم.
ضمنا باز اینجا از Return Value هم میتونین استفاده کنین.
ترکیب داشتن Output Parameter و Return Value این منطق رو داره که مثلا بعد از اجرای Procedure، اگر Return Value برابر با صفر بود، یعنی Procedure با موفقیت به اتمام رسیده، پس مقدار Output Parameter رو میتونین استفاده کنین. ولی اگر 1 بود، یعنی خطایی رخ داده و Output Parameter یا مقداری بدست نیاورده یا مقدارش معتبر نیست.
موفق باشید،
امین ثباتی MCSD