سؤال

لدي جدول مع العديد من حقول الحسابات مثل هذا:

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 أو طلبها على العمود المحسوب وترغب في إضافة فهرس عليه إنشاء فهارس على الأعمدة المحسوبة.

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

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