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

ارسال عدة متغيرات الى قواعد البيانات

بدأه Mohammad Ibrahim في 27 فبراير 2012 · 8 رد · 687 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اخواني واخواتي الاعزاء اريد مساعدتكم لكتابة sql query عن طريق sql server 2008 R

في البداية انا استخدم vb.net 2008 مع قواعد البيانات وسأقوم بأرسال عدة متغيرات الى قواعد البيانات على سبيل المثال:

انا يوجد لدي text box في البرنامج الذي استخدمه وسأقوم بأرسال متغيرات ليست ثابته وفي كل مره سيكون العدد مختلف لنفرض في المره الاولى سأقوم بأرسال

محمد، سعيد والمره اللي بعدها سأقوم بأرسال اسم واحد (محمد) وهكذا

انا كتبت بهذه الطريقة ولكن هذه للمتغيرات الثابته:

select SecondName from dbo.Emp where first_Name=@firstName1 and (SecondName in (select SecondName from dbo.Emp where first_Name=@firstNam2

المشكله انه لا يمكنني اضافة اكثر من اسم والشي الذي اريد الحصول عليه الاسم الثاني المتشابه بين عدة اسامي وهذه خلاصة الموضوع

وارجوا المساعده منكم في اقرب وقت وشاكر لكم تعاونكم

#2

انشاء هذه الوظيفة تقوم بقسيم الاسم

CREATE FUNCTION dbo.Split
(
        @RowData nvarchar(2000),
        @SplitOn nvarchar(5)
)  
RETURNS @RtnValue table 
(
        Id int identity(1,1),
        Data nvarchar(100)
) 
AS  
BEGIN 
        Declare @Cnt int
        Set @Cnt = 1

        While (Charindex(@SplitOn,@RowData)>0)
        Begin
                Insert Into @RtnValue (data)
                Select 
                        Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))

                Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))
                Set @Cnt = @Cnt + 1
        End

        Insert Into @RtnValue (data)
        Select Data = ltrim(rtrim(@RowData))

        Return
END

جرب هذا الاستعلام

declare @sName nvarcahr(300)
set @sName='محمد، سعيد'
select SecondName from dbo.Emp where first_Name in (select Data  from dbo.split(@sName,','))
#3
KARIMSOFT كتب:

انشاء هذه الوظيفة تقوم بقسيم الاسم

CREATE FUNCTION dbo.Split
(
        @RowData nvarchar(2000),
        @SplitOn nvarchar(5)
)  
RETURNS @RtnValue table 
(
        Id int identity(1,1),
        Data nvarchar(100)
) 
AS  
BEGIN 
        Declare @Cnt int
        Set @Cnt = 1

        While (Charindex(@SplitOn,@RowData)>0)
        Begin
                Insert Into @RtnValue (data)
                Select 
                        Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))

                Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))
                Set @Cnt = @Cnt + 1
        End

        Insert Into @RtnValue (data)
        Select Data = ltrim(rtrim(@RowData))

        Return
END

جرب هذا الاستعلام

declare @sName nvarcahr(300)
set @sName='محمد، سعيد'
select SecondName from dbo.Emp where first_Name in (select Data  from dbo.split(@sName,','))

اشكرك اخي العزيز ومن فضلك اخوي اذا ممكن تشرحلي الكود بالتفصيل اذا كان هذا لا يزعجك

وانا قمت بتجربة الكود وواجهني هذا الايرور

post-256986-086591500 1330406149_thumb.j

المرفقات
Error2.jpg
#4

لقد قمت بعم وظيفة Split تقوم باخذ نص به فاصل وتقوم بارجاع جدول كل كلفة في صف ثم ارسلت الجدول الناتج الي الاستعلام بسيطة

#5
KARIMSOFT كتب:

لقد قمت بعم وظيفة Split تقوم باخذ نص به فاصل وتقوم بارجاع جدول كل كلفة في صف ثم ارسلت الجدول الناتج الي الاستعلام بسيطة

اخي العزيز شكرا لك على تعاونك

لقد قمت بعمل المطلوب والحمد لله هناك نتئج ولكنها ليست المطلوبه

انا اريد الحصول على مايلي:

ابحث عن الاسم الثانية المتشابهه للأشخاص اللذين اسمائهم الاولى (محمد،عيسى....الخ)

يعني بتوضيح اكثر اريد البحث باستخدام الاسم الاول عن الاشخاص الذين اسمائهم الثانيه متشابهه

ارجو الافادة لأني جد احترت

#6

اريد عمل هذه الكود لعدة متغيرات:

select Second_Name from emp where first_Name ='Mohmmad' and Second_Name in(select Second_Name from emp where first_Name ='ali')

ارجو المساعده

#7

جرب هذا

select Second_Name from emp where first_Namein (select Data  from dbo.split(@sName1,','))  and Second_Name in(select Second_Name from emp where first_Name in (select Data  from dbo.split(@sName2,',')))
#8
KARIMSOFT كتب:

جرب هذا

select Second_Name from emp where first_Namein (select Data  from dbo.split(@sName1,','))  and Second_Name in(select Second_Name from emp where first_Name in (select Data  from dbo.split(@sName2,',')))

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

سيقوم هذا الكود بعمل مقارنة بين اسمين فقط او بين الاسماء الموجوده في @sName1 و الاسماء الموجوده في @sName2

وانا اريد البحث بين الاسماء اللي سوف ادخلها كلها بغض النظر كانت اسمين او 10, لنفرض سأقوم بأدخال الاسامي التاليه:

(محمد،سعيد،وعلي،احمد،سيف)

واريد البرنامج ان يخرجلي الاشيا المتشابهه بين جميع الاشخاص الذين سأقوم بادخل اسمائهم

لنفرض ان ال column الثاني يحوي على ريكورد يضم اوقات زيارتهم لمكان معين او حضورهم للعمل

وكل شخص له عدة ريكوردات

سأرفق جدول اكسل يمكن يوضح الصورة ويبسطها وتتضح الرؤية لديك

Book1.xls

#9

الوظيفة تقبل من اسم الي مليون اسم لا ياثر عدد الاسماء مجرد فصله بعد الاسم

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