ورود

View Full Version : اجرا چند بار یک sp



Iran58
دوشنبه 29 تیر 1394, 11:36 صبح
سلام
یک sp داریم که شماره شناسایی کارمند را میگیرد وحقوق دریافتی آن را بر می گرداند(در این sp فقط هر دفعه شماره یک کارمند را می توانیم وارد کنیم) حال می خواهم یک دستور بنویسم که بیاید از جدول کارمندان شماره شناسای هر کارمند را بگیرد و در spمورد نظر اجرا کند(10000کارمند داریم)
حقوق تمام کارمند را یک جا نمایش بدهد
چگونه باید کد نویسی کنم
باتشکر

tooraj_azizi_1035
دوشنبه 29 تیر 1394, 11:55 صبح
سلام
كد SP رو قرار بدين.

Iran58
دوشنبه 29 تیر 1394, 11:59 صبح
سلام
كد SP رو قرار بدين.
کد spرا نداریم این spرا از دیتابیس دیگر فراخوانی می کنیم قادر به مشاهد کد نیستیم وفقط خروجی آن شامل شماره کارمندی نام ماه و میزان حقوق در یافتی آن ماه می باشد

tooraj_azizi_1035
دوشنبه 29 تیر 1394, 12:39 عصر
يك تابع Table Valued بنويسيد به اين شكل:

create function dbo.CalcSalary(@EmpID int)
as
returns @Result TABLE
(
EmpID int,
MonthID int,
Salary int
)
as


inset into @Result
exec DBNAME.SCHEMA.YourSP @EmpID


end;

Schema ي جدول فوق را متناسب با خروجي SP محاسبه حقوق تغيير دهيد.
و بعد با اين كوئري براي همه كارمندان به يكباره محاسبه را انجام دهيد:


select * from employess e
cross apply dbo.CalcSalary(e.EmpID)

Iran58
دوشنبه 29 تیر 1394, 12:59 عصر
سلام
من کد زیر رانوشتم
create function dbo.CalcSalary(@EmpID int)
as
returns @Result TABLE
(
EmployeeID nvarchar(50),
yymm nvarchar(50),
TotAmount nvarchar(10),
LevelIn nvarchar(10)
)
as


insert into @Result
exec [dbo].[sp__Select] @EmpID


end;
اما اروز زیر را می دهد
Msg 156, Level 15, State 1, Procedure CalcSalary, Line 2
Incorrect syntax near the keyword 'as'.
Msg 1087, Level 15, State 2, Procedure CalcSalary, Line 13
Must declare the table variable "@Result".
Msg 102, Level 15, State 1, Procedure CalcSalary, Line 17
Incorrect syntax near ';'.

لطفا راهنمای بفرمایید

tooraj_azizi_1035
دوشنبه 29 تیر 1394, 14:10 عصر
SQL Server اجازه استفاده از INSERT EXEC رو در داخل تابع نميده. يك SP بنويسيد كه يك متغير TableValued به عنوان ورودي بگيره و با استفاده از كرسر هر بار يك مقدار از جدول بخونيد و بعد با INSERT EXEC نتايج SP رو در جدول Temp بنويسيد و در آخر پس از DEALLOCATE كرسر نتايج اجرا در جدول temp خواهد بود.