كيف يمكنني إعداد حقل محسوب بسيط في SQL Server؟
-
16-09-2019 - |
سؤال
لدي جدول مع العديد من حقول الحسابات مثل هذا:
MAIN_ACCT
GROUP_ACCT
SUB_ACCT
غالبا ما أحتاج إلى الجمع بينهم مثل هذا:
SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT
FROM ACCOUNT_TABLE
أود الحصول على حقل محسوب يقوم به هذا تلقائيا، حتى أتمكن من القول فقط:
SELECT ACCT_NUMBER FROM ACCOUNT_TABLE
ما هي أفضل طريقة للقيام بذلك؟
أنا أستخدم SQL Server 2005.
المحلول
ALTER TABLE ACCOUNT_TABLE
ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT PERSISTED
سيستمر هذا عمود محسوب وقد يؤدي بشكل أفضل في التحديدات من الحساب في العرض أو UDF إذا كان لديك عدد كبير من السجلات (بمجرد حدوث إنشاء العمود التاليت الذي قد يكون بطيئا بشكل مؤلم وربما يجب أن يحدث خلال أوقات الاستخدام المنخفضة ). سوف تبطئ إدراج وتحديثات. عادة ما أجد إدراج بطيء أو تحديث يتحمله بشكل أفضل من قبل المستخدمين من التأخير في تحديد ما لم تحصل على قضايا قضايا.
تعتمد أفضل طريقة للقيام بذلك كثيرا على استخدامك وأي نوع من الأداء الذي تحتاجه. إذا لم يكن لديك الكثير من السجلات أو إذا لم يتم استدعاء العمود المحسوب في كثير من الأحيان، فقد لا تريد عمود مستمر، ولكن إذا كنت تقوم بتشغيل تقارير في كثير من الأحيان مع جميع السجلات للسنة أو مجموعات كبيرة أخرى من البيانات، قد تجد العمود المحسوب المستمر يعمل بشكل أفضل بالنسبة لك. كما هو الحال مع أي مهمة من هذه الطبيعة، فإن الطريقة الوحيدة لمعرفة ما يعمل بشكل أفضل في وضعك هو اختبار.
نصائح أخرى
هذا مرشح رائع للنظر.
CREATE VIEW vwACCOUNT_TABLE
AS
SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT AS ACCT_NUMBER
FROM ACCOUNT_TABLE
GO
--now select from the View
SELECT ACCT_NUMBER FROM vwACCOUNT_TABLE
ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT;
لا يستمر العمود في الجدول، وسيتم إعادة إنشاؤه في كل مرة تشير إليه. يمكنك تحقيق نفس النتيجة باستخدام عرض. إذا كنت تستخدم تصفية Prodicates أو طلبها على العمود المحسوب وترغب في إضافة فهرس عليه إنشاء فهارس على الأعمدة المحسوبة.
حسنا، يمكنك إنشاء عرض للحساب والاستعلام عن ذلك. أو أعتقد أنه يمكنك إنشاء وظيفة محددة من قبل المستخدم التي من شأنها أن تنجز نفس الشيء.