سؤال

في الإجراء المخزوني الخاص بي، أحتاج إلى معلمة واحدة تعطيني إمكانات 3 قيم.

لذلك يمكنني أن أفعل شيئا مثل:

@p1  <-- my parameter


IF (@p1 ???)  -- include users
     SELECT * FROM USERS


IF (@p1 ???) -- include employees
    SELECT * FROM employees

IF (@p1 ???) -- iclude customers
    SELECT * FROM CUSTOMERS

أعتقد أنني سأضطر إلى القيام بشدة ضجيجا بعض الشيء، ولكن غير متأكد من كيفية القيام بذلك في SQL.

تحديث

أنا في الواقع القيام نقابة من نوع.

هل كانت مفيدة؟

المحلول

إذا كان @ p1 هو int، أو بعض البديل مثل bigint أو tinyint، فيمكنك استخدام bitwise و.
هنا مثال:

IF ( @p1 & 1 = 1)
IF ( @p1 & 4 = 4)

نصائح أخرى

بدلا من أن يكون لدى T-SQL Inline، فغالبا ما تكون أفضل حالا في إنشاء إجراءات منفصلة مخزنة واتصل بها.

هذا لأنه لا يوجد سوى خطة استعلام مخزنة مؤقتا واحدة لكل دفعة.

أيضا, ، استسلام تعليق ريموس: أنت تحطمت قاعدة المسؤولية الفردية. هذا يجعل خطأ الصيانة عرضة.

قد تكون قصة مختلفة إذا كنت تقوم دائما بإرجاع نفس مجموعات النتائج المتعددة (المريخ) ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top