الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما الخطا فى حساب المرتبات

بدأه shosho842000 في 22 أبريل 2010 · 4 رد · 812 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمته الله وبركاته

هو انا عايزاه اعمل الاتى عند حساب المرتبات للموظفين

عايزاه اولا اجيب التاريخ من الجدول بحيث ان لو التاريخ بيساوى تاريخ الى فى الشاشة يجب البيانات الى فى الجدول

ثانى حاجة لو التاريخ مش بيساوية يجيب البيانات الشهر الى فات يعنى تاريخ الشهر -1

انا وصلت للكود دا بس عايز طبعا تصحيح

CREATE PROCEDURE salary 
	-- Add the parameters for the stored procedure here
@date datetime ,
@date1 datetime ,
@olddate datetime 
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
@date1 =SELECT date FROM salary WHERE date=@date
IF @date1=@date
SELECT * FROM salary WHERE date=@date 
ELSE 
	@olddate=SELECT dateadd(MONTH,-1,date)

	INSERT INTO salary (@id1,@sal1,@sal2,@sal4,@sal5,@sal6,@sal7,@sal8,@sal9,@sal10,@sal11,@sal12,@sal13,@sal14,@sal15,@sal16,@sal17,@sal18,@sal19,@date ) SELECT @id1,@sal1,@sal2,@sal4,@sal5,@sal6,@sal7,@sal8,@sal9,@sal10,@sal11,@sal12,@sal13,@sal14,@sal15,@sal16,@sal17,@sal18,@sal19 FROM salary WHERE date=@olddate  	
END
GO

بحيت ان @date دا عبارة عن تاريخ الشاشة

@date1 دا تاريخ بجيبه بحيث انى هقارن بين الى موجود فى الجدول والى بيدخله المستخدم

@olddate دا الى هيجيب ليا تاريخ الشهر الى فات

وشكرا

ودا الغلط الى بيظهر

Msg 102, Level 15, State 1, Procedure salary, Line 18

Incorrect syntax near '@date1'.

Msg 102, Level 15, State 1, Procedure salary, Line 22

Incorrect syntax near '@olddate'.

Msg 137, Level 15, State 2, Procedure salary, Line 24

Must declare the scalar variable "@id1".

Msg 137, Level 15, State 2, Procedure salary, Line 24

Must declare the scalar variable "@id1".

#2

السلام عليكم

يوجد خطأ في كتابة الكود فاذا اردنا وضع قيمة في متغير يتم كما يلي :

 SELECT @date1=[date] FROM salary WHERE date=@date

او  لا كثر من متغير 

SELECT @date1=[date1]  , @date2=[date2]   FROM salary WHERE date=@date

وهكذا لبقية الاخطأء

#3

شكرا جزيلا

بس كان فى ملحوظة ضعيرة انا عايزاه يتاكد من الشهر اذا كان نفس الشهر ولا لا يعنى مثلا الجدول هيرجع بشهر 4 والمستخدم دخل شهر 4

يبقى ايه التعديل فى الكود دا

SELECT @date1 = date FROM salary WHERE date=@date

IF @date1=@date

اخليه يعمل دا ازاى طبعا باقى الكود زى ماهو

بس التغير هيكون هنا بس

#4

قومت بتعديل الكود الى

CREATE PROCEDURE salary 
        -- Add the parameters for the stored procedure here
@date datetime ,
@date1 datetime ,
@olddate datetime 
AS
BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;

    -- Insert statements for procedure here
SELECT @date1 = date FROM salary WHERE date=@date
IF @date1=@date
SELECT * FROM salary WHERE date=@date 
ELSE 
       SELECT @olddate= dateadd(MONTH,-1,date)

        INSERT INTO salary (@id,@sal1,@sal2,@sal4,@sal5,@sal6,@sal7,@sal8,@sal9,@sal10,@sal11,@sal12,@sal13,@sal14,@sal15,@sal16,@sal17,@sal18,@sal19,@date ) SELECT @id,@sal1,@sal2,@sal4,@sal5,@sal6,@sal7,@sal8,@sal9,@sal10,@sal11,@sal12,@sal13,@sal14,@sal15,@sal16,@sal17,@sal18,@sal19 FROM salary WHERE date=@olddate        
END
GO

يظهر لى خطا انه عايزانى اعرف @id

وهو الجملة كدا صحيحه فى insertinto بيكون فى علامة @ وكمان فى select

فى حاجة اخيره انا عايزاه وهو بيعمل اضافه للبياتات دى يضفها على الشهر الحالى

وشكرا

#5

السلام عليكم

في جملة insert لا يجب ان يكون هناك متغيرات (اي تبدأ ب @) وانما يجب وضع اسماء الحقول من الجدول اما فيٍ select فيمكن وضع متغيرات اضافة الى اسماء الحقول ويجب ان يكون عدد الحقول متساو في الجهتين.

لوضع تاريخ في هذا الشهر نستخدم Getdate() مثلا

 INSERT INTO salary (@id,@sal1,@sal2,@sal4,@sal5,@sal6,@sal7,@sal8,@sal9,@sal10,@sal11,@sal12,@sal13,@sal14,@sal15,@sal16,@sal17,@sal18,@sal19,@date )
 SELECT @id,@sal1,@sal2,@sal4,@sal5,@sal6,@sal7,@sal8,@sal9,@sal10,@sal11,@sal12,@sal13,@sal14,@sal15,@sal16,@sal17,@sal18,@sal19 
,Getdate() 
FROM salary WHERE date=@olddate

مواضيع مشابهة