PDA

View Full Version : سوال: گرفتن نتیجه یک EXEC sp_executesql در یک SP



naeeme
دوشنبه 04 آذر 1387, 09:30 صبح
نمی دونم عنوان گویا هست یا نه.
من یک sp نوشتم که درش بطور داینامیک یک query تولید میشه و بعد از اون توسط EXEC sp_executesql اجرا میشه. حالا می خوام در همین sp نتیجه اجرای این query رو دریافت کنم و براساس نتیجه حاصل یک تصمیم گیری کرده و مقداری رو به عنوان خروجی ایجاد کنم.
میشه در این زمینه راهنمایی کنید؟
--------
در نوشتن sp خیلی مبتدی هستم. لطفا از مبنا قضیه رو توضیح بدین.

AminSobati
دوشنبه 04 آذر 1387, 10:54 صبح
دوست عزیزم،
پارامترهایی که در sp_executesql تعریف میکنید میتونن OUTPUT باشند.

masoudcg1
دوشنبه 04 آذر 1387, 19:41 عصر
لطفا sp و خروجی مورد نظر را بزارید

hamidprogramer
سه شنبه 05 آذر 1387, 22:52 عصر
سلام؛
با عرض پوزش از حضور استاد ثباتي يك نمونه مثال كه در اين زمينه كار كردم رو براتون ميذارم به دقت به نحوه مقدار دهي به متغييرها و درنهايت به متغيير Result@ توجه كنين.
اين Sp با دريافت نام يك جدول و فيلدي كه از نوع nvarchar هست مي تونه مجموع مقادير وارد شده كه به صورت تايم هست رو با هم جمع كنه به عبارتي شما ميتونين زمان رو در فيلدي به صورت متن ذخيره كنين و سپس جمه ستون اون رو بوسيله اين Sp بدست بيارين .
توي اين Sp از روشي كه شما درخواست كردين استفاده شده.
به مثال توجه كنيد :

Create Procedure [dbo].[SumOfTotalDuration]
@FildName nvarchar(50),
@TableName nvarchar(50),
@Result nvarchar(20) OUTPUT

As
Begin
Declare @HourCounter int,
@MinuteCounter int,
@SecondCounter int,
@HH nvarchar(5),
@MM nvarchar(5),
@SS nvarchar(5),
@SumOfDuration int,
@SQLCommand nvarchar(100),
@ParamList nvarchar(100)

Set @ParamList = N'@GetSecond int Output'
Set @SQLCommand = N'(select @GetSecond = Sum([dbo].[TimeToSecond] (' + @FildName + N')) from ' + @TableName + N')'
Execute sp_executesql @SQLCommand,@ParamList,@GetSecond = @SumOfDuration OUTPUT

Set @HourCounter = 0
Set @MinuteCounter = 0
Set @SecondCounter = 0
/*----------------------------------------------------*/
while @SumOfDuration >= 3600 /* Set Hour */
Begin
Set @SumOfDuration = @SumOfDuration - 3600
Set @HourCounter = @HourCounter + 1
End
Set @HH = @HourCounter
/*----------------------------------------------------*/
While @SumOfDuration >= 60 /* Set Minute */
Begin
Set @SumOfDuration = @SumOfDuration - 60
Set @MinuteCounter = @MinuteCounter + 1
End
Set @MM = @MinuteCounter
/*----------------------------------------------------*/
Set @SecondCounter = @SumOfDuration /* Set Second */
Set @SS = @SecondCounter
/*----------------------------------------------------*/
/* Set Result Format */
IF @HourCounter < 10
Set @HH = '0' + @HH
IF @MinuteCounter < 10
Set @MM = '0' + @MM
IF @SecondCounter < 10
Set @SS = '0'+ @SS
/*---------------------------------------------------*/
/* Set Time '--:--:--' */
Select @Result = @HH + ':' + @MM + ':' + @SS
End

AminSobati
سه شنبه 05 آذر 1387, 23:38 عصر
صحیح... الان سوال شما چی هست؟!

hamidprogramer
چهارشنبه 06 آذر 1387, 21:44 عصر
با سلام خدمت استاد ثباتي
سوالي نداشتم فقط جهت راهنمايي دوستان اين Sp رو گذاشتم.
ممنون مي شم اگر اشكالي وجود داره بفرماييد.