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

الاستعلام لا يرجع ببيانات اذا اضفت استعلام

بدأه محمد فؤاد تركي في 17 مايو 2011 · 11 رد · 783 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الاخوة الزملاء

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

عندي مشكلة في الاستعلام

عندما أضيف هذا Parameter لا يأتي الاستعلام بأي بيانات وعندما أقوم بالغائة يعمل الاستعلام فأنا لا أدري ما هي المشكلة

ALTER Proc [dbo].[Rpt_End_Contract_note]

@CompanyCode as nvarchar (5)
--,@FEmployeeCode as nvarchar (10)
--,@TEmployeeCode as nvarchar (10)


as begin


SELECT     dbo.Employee.EmpCode, dbo.Employee.EmpEnFulName, dbo.Job.JobName, dbo.OrgStrucutreDET.unitName, dbo.Employee.CompCode, 
                      max(dbo.EmpContract.ContStDate)as ConStDate, max(dbo.EmpContract.ContEndDate)ContEndDate,max(dbo.EmpContract.Serial)as Serial
FROM         dbo.Employee INNER JOIN
                      dbo.EmpContract ON dbo.Employee.EmpCode = dbo.EmpContract.EmpCode AND 
                      dbo.Employee.CompCode = dbo.EmpContract.CompCode LEFT OUTER JOIN
                      dbo.Job ON dbo.Employee.CompCode = dbo.Job.CompCode AND dbo.Employee.Jobcode = dbo.Job.JobCode LEFT OUTER JOIN
                      dbo.OrgStrucutreDET ON dbo.Employee.CompCode = dbo.OrgStrucutreDET.CompCode AND 
                      dbo.Employee.DepartmentCode = dbo.OrgStrucutreDET.UnitPath

WHERE      

serial in (select max(serial) from  dbo.EmpContract  

where 

 --(dbo.Employee.EmpCode between @FEmployeeCode and @TEmployeeCode))
 dbo.Employee.CompCode = @CompanyCode)

group by      

dbo.Employee.EmpCode, dbo.Employee.EmpEnFulName, dbo.Job.JobName, dbo.OrgStrucutreDET.unitName, dbo.Employee.CompCode, 
                      dbo.EmpContract.Serial

 end

وهذا هو السطر محل المشكلة الذي اضيفة للاستعلام فلا يرجع بأي بيانات

(dbo.Employee.EmpCode between @FEmployeeCode and @TEmployeeCode))

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#2

جرب أخي وضع And

(

dbo.Employee.EmpCode between @FEmployeeCode and @TEmployeeCode) and  (dbo.Employee.CompCode = @CompanyCode)

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#3

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

اخي اعتقد انك نسيت قوس, جرب


dbo.Employee.EmpCode between (@FEmployeeCode and @TEmployeeCode) and (dbo.Employee.CompCode = @CompanyCode)

.:: Wish to become better and better ::.

#4

لا اعتقد يا أخي Medo أن المشكلة في And لاني جربتها ولم تفلح

أخي الفاضل VB Helper

هي بالفعل مشكلة أقواس لكن الي الان لم اتوصل الي الحل والسبب في اعتقادي في الاستعلام الفرعي الاول أقصد من أول جملة Where الاولي

عموما هذا كانت نتيجة وضع الاقواس اللي حضرتك قلت عليها ( And ) وتحتها خط أحمر

post-46243-056697700 1305696731_thumb.jp

حاولت أن ازيل هذا السطر من الاستعلام فاشتغل لكني في نفس الوقت أحتاج ان يكون هذا السطر موجود لانه بيجلب أعلي قيمة في حقل Serial

WHERE      serial in (select max(serial) from  dbo.EmpContract

post-46243-034852900 1305698552_thumb.jp

المرفقات
18-05-2011 7-25-02 AM.jpg18-05-2011 7-55-47 AM.jpg

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 18 مايو 2011 في 09:02

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#5

طيب مثلا لو عملت Funtion بدون السطر

WHERE      serial in (select max(serial) from  dbo.EmpContract

وبعد كده عملت Select من منها بشرط WHERE serial in (select max(serial) from dbo.EmpContract

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#6

مش فاهم

ممكن توضيح

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#7

يعني :

1- أعمل inline function أكتب فيها كود الStored Procedure كله ماعدا السطر التالي

WHERE      serial in (select max(serial) from  dbo.EmpContract

2- إعمل Select من هذه الfunction وإعطيها كل الparameters اللي عايزاها وبكده بيكون عندك جدول تقدر تـــwhere بيه السطر اللي فقط

يارب يكون التوضيح مفهوم

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#8

يا ريت لو قدرت تعدل علي جملة Select يبقي كتر خيرك

أو اكتب لي مثال توضيحي لكن افهم الفكرة

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#9

أسف على التأخير ....

خلينا نمشي معاها واحده واحده أولا هل هذا المخطط لهذه الجداول ؟؟؟

post-126189-047013600 1305719615_thumb.p
المرفقات
Capture.PNG

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#10

أخي ميدو

شكراً علي اهتمامك وتقديرك وبعتذر عن التأخير في الرد

وحتي أكون واضح في السؤال المشكلة تكمن في جملة Where

WHERE

(@CompanyCode = dbo.Employee.CompCode )

and (convert (varchar (10), dbo.Employee.EmpJobStDat,103)
 between (convert (varchar (10),@FEmpJobStDat,103)) and 
 (convert (varchar (10),@TEmpJobStDat,103)))

or dbo.Employee.EmpCode = @EmployeeCode

لاحظ معي ...

اذا حاولت تشغيل الــ stored procedure بهذا الشكل تظهر النتيجة سليمة

DECLARE	@return_value int

EXEC	@return_value = [dbo].[Rpt_Rpt_Get_Job]
		@CompanyCode = N'001',
		@EmployeeCode = NULL,
		@FEmpJobStDat = N'01-05-2011',
		@TEmpJobStDat = N'01-05-2011'

SELECT	'Return Value' = @return_value

أما اذا حاولت تشغيل Stored procedure بهذا الشكل البيانات لا ترجع بشكل سليم بيتم تجاهل الشرط 001 وبيعرض الشرط الثاني فقط ولا أدري سبب هذه المشكلة

DECLARE	@return_value int

EXEC	@return_value = [dbo].[Rpt_Rpt_Get_Job]
		@CompanyCode = N'001',
		@EmployeeCode = N'3872',
		@FEmpJobStDat = NULL,
		@TEmpJobStDat = NULL

SELECT	'Return Value' = @return_value

مرفق النتيجة الخاطئة

post-46243-080772500 1305803561_thumb.jp

مرفق الاسكريبت كاملاً

ALTER proc [dbo].[Rpt_Rpt_Get_Job]
(
@CompanyCode as nvarchar (5)
,@EmployeeCode as nvarchar (10)
,@FEmpJobStDat as datetime
,@TEmpJobStDat as datetime
)

as 
begin

SELECT     dbo.Employee.EmpCode, dbo.Employee.EmpEnFulName, dbo.Job.JobName, convert(varchar(10),dbo.Employee.EmpJobStDat,103)as EmpJobStDat , dbo.OrgStrucutreDET.unitName, 
                      dbo.Employee.CompCode
FROM         dbo.Employee LEFT OUTER JOIN
                      dbo.Job ON dbo.Employee.CompCode = dbo.Job.CompCode AND dbo.Employee.Jobcode = dbo.Job.JobCode LEFT OUTER JOIN
                      dbo.OrgStrucutreDET ON dbo.Employee.CompCode = dbo.OrgStrucutreDET.CompCode AND 
                      dbo.Employee.DepartmentCode = dbo.OrgStrucutreDET.UnitPath

WHERE

(@CompanyCode = dbo.Employee.CompCode )

and (convert (varchar (10), dbo.Employee.EmpJobStDat,103)
 between (convert (varchar (10),@FEmpJobStDat,103)) and 
 (convert (varchar (10),@TEmpJobStDat,103)))

or dbo.Employee.EmpCode = @EmployeeCode 

end
المرفقات
19-05-2011 1-05-12 PM.jpg

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 19 مايو 2011 في 14:18

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#11

طيب ممكن تجرب تغيير كود الwhere بهذا الكود

WHERE
           ((dbo.Employee.CompCode=@CompanyCode) or (dbo.Employee.EmpCode = @EmployeeCode))
           And 

           (Employee.EmpJobStDat between @FEmpJobStDat and @TEmpJobStDat)

وكمان في حاجه حضرتك بتحول التاريخ لنص ...فكيف هو حينفذ الbetween صح ؟

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#12

الاخ محمد فؤاد تركي

تحية طيبة وبعد 1 جرب تعمل view يحتوى على جملة select وكل الشروط ما عدا الشرط

الذى يحتولى المشكلة ثم ضيف الشرط الاخير فى procedure

كمان جرب تخلى المتخيرات ارقام

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…