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

لدي إشكالية في جملة الاستعلام In(expression)

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

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

أعزائي لدي برنامج استخدم فيه فيجوال بيسك 2008 و SQL Server 2008 وأستخدم فيه الاجراءات المخزنة و البارمتر

مشكلتي في جملة الاستعلام IN()

الجمل المستخدمة داخل الفيجوال بيسك:

cmd.Parameters.Add("@GetValue", SqlDbType.NVarChar, 10)

da.SelectCommand.Parameters("@GetValue").Value = "2"

وفي داخل الـ SQL:

@GetTrdType as nvarchar(10),

SELECT ......

WHERE (Ms.TRD_TYPE In (@GetValue))

إذا نفذته بالشكل السابق لا توجد فيه مشكلة ،ولكن عندما استخدم الشكل التالي يظهر لدي خطأ

da.SelectCommand.Parameters("@GetValue").Value = "2,3,4"

وهذه رسالة الخطأ:

Conversion failed when converting the nvarchar "2,3,4" to data type smallint

أفيدوني جزاكم الله خيرا

#2

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

اخي جرب الاستعلام التالي

Select * From YourTable Where Ms.TRD_TYPE IN (N'2',N'3',N'4')

لأن نوع الحقل نص وليس رقم!!

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

#3

شكرا جزيلا لك أخي العزيز VB Helper

وعفوا ان لم أوضح طلبي جيدا

حيث أنني أرغب من خلال أكواد الفيجوال بيسك أن يمرر قيمة البارمتر بشكل صحيح

وأن هذا الكود ( الكود المطلوب التأكد من صحته )

da.SelectCommand.Parameters("@GetValue").Value = "2,3,4"

عند نتفيذ البرنامج في الفيجوال تعطي رسالة الخطأ السابقه

وعند تنفيذها بهذا الشكل

da.SelectCommand.Parameters("@GetValue").Value = "2"

ينفذ بشكل صحيح

وملاحظة أخرى بأنه من خلال SQL أعتقد بأنه يترجم كالتالي WHERE Ms.TRD_TYPE In ('2,3,4')

والمفترض بان يكون بدون علامات التنصيص ' '

لأنني محتاج الى استخدام جملة IN( ) بشده في برنامجي وأن أضع بداخلها متغيرات كثيره يحددها مستخدم البرنامج

#4

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

اخي بس اي وسيط له قيمة واحدة وليست عدة قيم؟!! لكن يمكنك وضع قيمك ضمن مصفوفة ومن ثم تستخدم الدالة String.Join لتقوم بربط العناصر بفاصلة ومن ثم مررها مباشرة في جملة الاستعلام

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

#5

السلام عليكم

في مثل هذه الحالة يجب بناء جملة الاستعلام وجعلها ديناميكية كمايلي :

create procedure proc1 (
@GetValue nvarchar(100) 
)

as 


declare @sql nvarchar(1000) 

select @sql = 'SELECT *  FROM Ms where Ms.TRD_TYPE in (' + @GetValue + ')'

exec( @sql)

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