2009-08-13 23 views
14

SQL Serverで単純な計算フィールドを設定するにはどうすればよいですか?

私はこのようないくつかのアカウントフィールドを持つテーブルを持っています:

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を使用しています。

答えて

25
ALTER TABLE ACCOUNT_TABLE 
ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT PERSISTED 

これは、計算列を保持し、列のintial作成は痛々しいほど遅くなることがこれが起こった後、あなたが(多数のレコードを持っている場合、ビューまたはUDFの計算より選択してパフォーマンスが向上することができ、おそらく低使用時間中に起こるはずです)。挿入と更新が遅くなります。通常、遅い挿入や更新は、ロックの問題が発生しない限り、選択の遅れよりもユーザーの方が耐えられることがわかります。

これを実行する最適な方法は、使用方法や必要なパフォーマンスによって大きく異なります。大量のレコードがない場合や、計算カラムが頻繁に呼び出されない場合は、永続カラムは必要ありませんが、その年のすべてのレコードまたは他の大きなセットのレポートを頻繁に実行する場合はデータを使用すると、永続化された計算列がより適切に機能することがあります。このような仕事の場合と同様に、あなたの状況に最も適していることを知る唯一の方法は、テストすることです。

+0

偉大な、私にとってはまだかなりの年後に役立ちます。 – enderland

3

まあを使用している、あなたはACCOUNT_TABLEのビューを作成して、それを照会することができます。あるいは、同じことを達成するユーザー定義関数を作成することができます。

8

これは、ビューの優れた候補です。

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 
+0

数秒で私を殴らなければならない。 heh – DavidStein

5
ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT; 

列がテーブルに保存されていない、オン-CLYあなたはそれを参照するたびに再作成されます。ビューを使用して同じ結果を得ることができます。計算述語を使用して計算列を順序付けし、その上に索引を追加する場合は、Creating Indexes on Computed Columnsを参照してください。

+2

あなたは列を永続化することができ、ビュー内で行う必要がある再計算の時間を費やすことはありません。データを変更するときのわずかな遅延は、情報を照会するたびに長い遅延よりもはるかに優れているため、私たちはデータを保持します。永続化されている場合は、列のインデックスを作成することもできます – HLGEM

+0

プロジェクトのメンテナンスを実行するときに永続的な列が認識されている限り、あなたがいないなら、これは問題が起こる場所です。 – Coops

関連する問題