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

اضافة شرط If في جملة Select

بدأه زكيري عبد العالي في 10 مارس 2009 · 5 رد · 1,224 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عندي اجراء مخزن في القاعدة و اريد اضافة شرط كمايلي

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go
-- =============================================
-- Author:        <zekiri,abdelali>
-- Create date: <09-03-2009>
-- =============================================
ALTER  PROCEDURE [dbo].[GetListInj]
@IDST  varchar(400),
@IDOP  varchar(400),
@LEVEL varchar(20) ,
@LANG  varchar(400)

AS BEGIN SELECT sub.StName, soa.idop,soa.opname, soa.CountryCode,opmkg.opLevel, 
           count(stop.cpycode) AS 'countCpy'

    FROM dbt..op stop (nolock),
         dbt..opassignment soa (nolock),
         dbt..subco sub (nolock),
         cop..OOPMKG opmkg (nolock)

    WHERE soa.idop = stop.idop and soa.idop = opmkg.OpMkgCode and soa.idst = sub.idst and (stop.CPB_ResultCode='OKCPB') and (stop.CPB_URD BETWEEN '2009-02-03' and '2009-03-03')
    [xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]
   Group BY sub.StName, soa.idop,soa.opname ,soa.CountryCode,opmkg.opLevel
END

الشرط يكون كمايلي 
اذاكان المتغير
  IDST  = -1
 لا تقوم باضافة شرط الفلترة and soa.idst in (@IDST)
و ايضا بانسية ل IDOP and stop.idop       in (@IDOP)

هذا ما قمت به لكن لا يعمل

and ((@IDST   = -1 ) or (soa.idst in (@IDST))) and ((@IDOP   = -1 ) or (stop.idop       in (@IDOP) ) ) and ((@LEVEL = -1) or (opmkg.opLevel   in (@LEVEL)) ) and ((@LANG  = -1 ) or (soa.CountryCode in (@LANG) ) )

شكرا بكم

#2

السلام عليكم

وجدت الحل المشكلة في قوس فقط شكرا

لكن مشكلة اخري في نفس الاجراء و ساختصرة لتوضيح

SELECT *
FROM table1 WHERE CountryCode in ('F','D')

يشتغل

عندي برامتر اسمه

@lang

حيث اكتب فيه بواسطة الدلفي بريسم

@lang = ' 'F','D' ' ;

SELECT *
FROM table1 WHERE CountryCode in (@lang)

فلاينفذ الامر حاولت بكتابه اسم الاجراء في اسكل سرفر مع اعطاء القيمه فلا تنفذ فكيف اكتب القيمة

شكرا

GetListInj اسم الاجراء

@lang القيم المحدد من المستعمل

وهي 'f','E','.......

GetListInj '  'F','D'  '

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 11 مارس 2009 في 15:06

#3
' ''F'' , ''D'' '
' "F" , "D" '

كاها لا تشتغل

#4

ربما السؤال غير واضح عندي ادراء هوا

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go
-- =============================================
-- Author:        <zekiri,abdelali>
-- Create date: <09-03-2009>
-- =============================================
ALTER  PROCEDURE [dbo].[GetListInj]
@IDST  varchar(400),
@IDOP  varchar(400),
@LEVEL varchar(20) ,
@LANG  varchar(400)

AS BEGIN SELECT sub.StName, soa.idop,soa.opname, soa.CountryCode,opmkg.opLevel, 
           count(stop.cpycode) AS 'countCpy'

    FROM dbt..op stop (nolock),
         dbt..opassignment soa (nolock),
         dbt..subco sub (nolock),
         cop..OOPMKG opmkg (nolock)

    WHERE soa.idop = stop.idop and soa.idop = opmkg.OpMkgCode and soa.idst = sub.idst and (stop.CPB_ResultCode='OKCPB') and and ( stop.CPB_URD BETWEEN @DATED and @DATEF          ) and ( (@IDST  ='-1' ) or (soa.idst        in (@IDST) ) ) and ( (@IDOP  ='-1' ) or (stop.idop       in (@IDOP) ) ) and ( (@LEVEL ='-1' ) or (opmkg.opLevel   in (@LEVEL)) ) and ( (@LANG  ='-1' ) or (soa.CountryCode in (@LANG) ) )
Group BY sub.StName, soa.idop,soa.opname ,soa.CountryCode,opmkg.opLevel
END

ثم اناديه فعندما اعطيه القيم التاليه

GetListInj	'-1', '-1' ,'-1' ,'F','2009-11-03'  ,'2009-12-03'

تضهر النتيجه صحيحة

GetListInj	'10', '2' ,'465' ,'E','2009-11-03'  ,'2009-12-03'

تضهر النتيجه صحيحة

لكن

GetListInj	'12,11,45'  ,  '1,2,3'  ,  '0,1,2' ,  'F,E,D'  ,  '2009-11-03'  ,'2009-12-03'

لا تعمل

شكرا

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 11 مارس 2009 في 16:27

#5

هل جربت بهذا الشكل

SELECT *
FROM table1 WHERE CountryCode in ['F','D']

تم تعديل هذه المشاركة بواسطة أبو محمـد في 11 مارس 2009 في 19:11

#6

الحمد لله و جدت الحل

بما اني لا يمكنني ارسال متغيرة جدول فاني استعملت جدول خيالي ثم قسمت السلسلة المرسلة مثلا 'F',AR',D'...الخ و وضعتها في الجول ثم عملت عليها جوانت ربط

inner join gg..st_table(@COUNTRY) T_COUNTRY
		  on ((@COUNTRY='-1') or (og.countryCode = T_COUNTRY.value))

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 12 مارس 2009 في 17:32

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