PDA

View Full Version : کار execute در Sp



bftarane
سه شنبه 10 اردیبهشت 1392, 15:37 عصر
سلام
لطفاً این Sp رو ببینید

ALTER PROCEDURE [dbo].[sptblRequestInnerBuyYearlyShow] (@pYear as smallint) AS
declare @pYearOld as smallint
set @pYearOld = @pYear - 1
Execute
(
'SELECT IstgRef.dbo.tbrFolder.folName AS rieSuppliantName,
SUM(CASE rieYear WHEN ' + @pYear + ' THEN dbo.tblRequestInnerBuyMonth.rieBill ELSE 0 END) AS rieBuyYearly,
SUM(CASE rieYear WHEN ' + @pYear + ' THEN dbo.tblRequestInnerBuyMonth.rieBillPercent ELSE 0 END) AS rieBuyYearlyPercent,
SUM(CASE rieYear WHEN ' + @pYearOld + ' THEN dbo.tblRequestInnerBuyMonth.rieBill ELSE 0 END) AS rieBuyYearlyOld,
SUM(CASE rieYear WHEN ' + @pYearOld + ' THEN dbo.tblRequestInnerBuyMonth.rieBillPercent ELSE 0 END) AS rieBuyYearlyPercentOld
FROM dbo.tblRequestInnerBuyMonth LEFT OUTER JOIN
IstgRef.dbo.tbrFolder ON dbo.tblRequestInnerBuyMonth.rieSuppliant = IstgRef.dbo.tbrFolder.folId
Where rieYear in ( ' + @pYearOld + ' , ' + @pYear + ' )
GROUP BY IstgRef.dbo.tbrFolder.folName '
)
منظور از Execute در اینجا چیه و چه کاری انجام میده؟

یوسف زالی
سه شنبه 10 اردیبهشت 1392, 16:26 عصر
سلام.
نوعی برنامه نویسی اسکریپت (TSQL) در اس کیو ال وجود داره به نام داینامیک.
کاری مشابه تابع Eval در جاوا اسکریپت تقریبا.
با این دستور میایم و یک رشته رو اجرا می کنیم.
یعنی در یک رشته دستورات رو می نویسیم و اصلاح می کنیم. این رشته رو می تونیم به هر طریق ویرایش کنیم.
بعد از اتمام کار اون رو با این دستور "ران" می کنیم و دقیقا مثل اینه که در یک صفحه جدید اس کیو ال یک New Query داریم با محتوای این رشته ران می کنیم.

با این دستور می تونید SP ها رو هم ران کنید.
فرمت دیگه این دستور Exec هست.
نکته: برای ران شدن رشته ها حتما باید متغیر رشته ای یا خود رشته رو داخل پرانتز بگذاریم.

موفق باشید.