الاتحاد أو استخدام التحكم في التدفق المنطق لتحديد الجدول أن يقدم على

StackOverflow https://stackoverflow.com/questions/523710

سؤال

أنا أعمل مع باري 3 التطبيق حيث لا أستطيع تغيير الجداول.قمنا ببناء العرف مطابقة "الشهري" جداول إضافية التاريخ والوقت عمود "AsOfDate" أين نحن تفريغ البيانات في نهاية الشهر و العلم تلك البيانات مع تاريخ آخر يوم من الشهر.

كنت تريد أن تكون قادرة على إنشاء إجراء مخزن (تصميم التطبيق يتطلب عرض أو تخزين proc كمصدر جميع التقارير.) و استخدام المعلمة والتي سوف إما استخدام البيانات الحالية الجدول (المعلمة قد تكون فارغة أو = تاريخ اليوم) أو استخدام نهاية الشهر الجدول مرشح قبل نهاية الشهر حتى الآن.بهذه الطريقة, أنا واحد حيث يمكن للمستخدم استخدام إما حالية أو بيانات من شهر معين في نهاية الفترة.

التي تفضل (ولماذا) آسف هذه ليست مشفرة بالكامل

الحل #1 الاتحاد الاستعلام

Create Proc Balance_Report (@AsOfDate)
AS

Select Column1
From
    (Select GetDate() as AsOfDate
       , Column1 
     From Current.Balance
    Union 
    Select AsOfDate
       , Column1 From MonthEnd.Balance
    ) AS All_Balances
Where All_Balances.AsOfDate = @AsOfDate

الحل #2 استخدام إذا كان البيان حدد الجدول

Create Proc Balance_Report (@AsOfDate)
AS

If @AsOfDate IS NULL or @AsOfDate = GetDate()
   Select GetDate() as AsOfDate
       , Column1 
     From Current.Balance
Else
    Select AsOfDate
       , Column1 From MonthEnd.Balance
    Where AsOfDate = @AsOfDate

مرة أخرى, هذه ليست مشفرة بالكامل و هو نوع من db الملحد (ولكن من SQL Server 2005).

تحرير:الاختلاف الحل #2 منفصلة باستخدام الإجراءات المخزنة

Create Proc Balance_Report (@AsOfDate)
AS

If @AsOfDate IS NULL or @AsOfDate = GetDate()
   Exec Current_Balance_Date -- no param necessary
Else
    exec MonthEnd_Balance_Date @AsOfDate
هل كانت مفيدة؟

المحلول

كيف يكون لديك أشياء إعداد الطريقة الثانية من المحتمل أن يكون أسرع.إذا كنت تريد استخدام مقسم طريقة عرض ثم هل يمكن وضع القيود في مثل هذه الطريقة أن الأمثل من شأنه أن نعرف أن تتجاهل واحد أو أكثر من الجداول في تحديد و سوف تحصل على نفس الأداء.وهذا من شأنه أيضا تمكنك من الحفاظ على كل منطق في بيان واحد بدلا من الحاجة إلى الحفاظ على بيانين في المزامنة.التي قد أو قد لا يكون مشكلة بالنسبة لك على أساس مدى تعقيد حدد البيان.

شيء واحد أن نتذكر على الرغم من أن إذا كنت تستخدم الطريقة الثانية ، تأكد من وضع علامة الإجراء المخزن كما هو الحال مع (ترجمة) (أنا لا أتذكر إذا كان بين قوسين هي تتطلب أو لا - التحقق من بناء الجملة).بهذه الطريقة سوف محسن إنشاء استعلام جديد خطة تستند إلى أي فرع من البيان إذا يجب أن يعدم.

نصائح أخرى

أنا أفضل عدم حل الاتحاد.اختيار من جدول واحد سوف يكون دائما أسرع من القيام الاتحاد واختيار واحد الجدول بيانات من الاتحاد.

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