PDA

View Full Version : سوال: اين پروسيجر درسته ؟‌



majidmir
سه شنبه 11 خرداد 1389, 14:37 عصر
سلام
اين پروسيجر رو واسه صدور صورتحساب كالا نوشتم
1-ايا درسته؟
CREATE PROCEDURE M_K_Kharid_INSERT
@cod as int,
@codkala as int,
@codmoshtari as int ,
@noaekharid as nchar(10),
@takhfif as money,
@date1 as datetime,
@tedad as int
AS
declare @price as money
/* جهت جلوگيري از ورود مقادير تكراري */
if (select count(*) from kharidmoshtari where (cod=@cod and @codkala=codkala and @codmoshtari=codmoshtari and @noaekharid=noaekharid and @takhfif=takhfif and @date1=date1 and tedad=@tedad))=0
begin

-- شرط جهت انتخاب به تعداد موجودي
if (SELECT count(*) FROM kala where(tedad >=@tedad ))>0
begin

insert into kharidmoshtari (cod,codkala,codmoshtari,noaekharid,takhfif,date1, tedad,price1)

select @cod,@codkala,@codmoshtari,@noaekharid,@takhfif, @date1,@tedad, sum(kala.ghamatfo*kharidmoshtari.tedad) as price
from kala
join kharidmoshtari
on kala.cod=kharidmoshtari.codkala
group by kharidmoshtari.tedad, kala.ghamatfo, kharidmoshtari.cod
--به تعداد خريد از موجودي كالا كسر ميشود
update tedad set tedad=tedad-@tedad
where cod=@cod

return 1
end
end
else
return 0
GO

2-چطوري بايد توي Query Analyzer اونو اجرا كنم و مقدار بدم ؟ اينو نوشتم اشتباه در مياد
M_K_Kharid_INSERT 100,5,13,1,2,2009,50
و تنها ارگوماني رو كه ارسال نميكنم price هست كه اونو بايد خود روسيجر محاسبه كنه :عصبانی++:

محمد سلیم آبادی
سه شنبه 11 خرداد 1389, 15:05 عصر
سلام،
راجب سوال اول، منظورتون از صحت sp چیه از نظر منطقی یا syntax ای؟
راجب سوال دوم، برای اجرا کردن یک SP نیاز هست از عبارت EXECUTE یا بطور خلاصه EXEC استفاده شود یعنی:

EXECUTE M_K_Kharid_INSERT 100,5,13,1,2,2009,50

majidmir
سه شنبه 11 خرداد 1389, 16:57 عصر
سلام،
راجب سوال اول، منظورتون از صحت sp چیه از نظر منطقی یا syntax ای؟
راجب سوال دوم، برای اجرا کردن یک SP نیاز هست از عبارت EXECUTE یا بطور خلاصه EXEC استفاده شود یعنی:

EXECUTE M_K_Kharid_INSERT 100,5,13,1,2,2009,50

سوال اول : از نظر منطقي منظورمه syntax مشكلي نداره :چشمک:
سوال دوم : مشكل از Exec نيست ! موقعي كه از يه Sp استفاده ميكني نيازي به نوشتم exec نيست در ضمن با exec هم خطا ميده كه ارگومان ها درست نيستن ! طبق sp كه نوشتم به price گير ميده يا شايد هم به تاريخ :متفکر:

محمد سلیم آبادی
سه شنبه 11 خرداد 1389, 17:55 عصر
اجرای یک SP بدون کمک گرفتن از EXEC امکان پذیر نیست (در Analyzer)
پارامتری با نام Date1 تعریف کردین که از نوع Datetime هست ولی موقع پاس دادن مقادیر به پروسیجر نوع داده ی مناسبی را انتخاب نکردین.
EXECUTE M_K_Kharid_INSERT 100,5,13,1,2,2009,50
باید تبدیل بشه به چیزی شبیه به این:
EXECUTE M_K_Kharid_INSERT 100,5,13,1,2,1/1/2009,50

برای متوجه شدن درستی یا نادرسی رویه بایستی امتحانش کرد.