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

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

質問

次のようないくつかのアカウントフィールドを含むテーブルがあります。

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の計算より選択して、より良い行うことが柱のintial作成は痛々しいほど遅くなることが、おそらく中に発生するはずであるが起こった後に低使用時間)。これは、挿入と更新が遅くなります。通常、私はあなたがロックの問題を取得しない限り、ゆっくりと挿入または更新は、選択の遅れよりも、ユーザーがより良い許容される見つけます。

これを行うための最善の方法は、あなたの使用状況に多大に依存し、どのようなパフォーマンスのあなたが必要となります。あなたは、レコードの多くを持っていないか、計算列は、その頻繁に呼び出されることはありません場合は、あなたが頻繁にすべての年のレコードまたは他の大規模なセットを使用してレポートを実行している場合、あなたは永続化列をしたいが、ない場合がありますデータは、あなたが持続して計算カラムはあなたのために良い作品かもしれません。この種の任意のタスクと同じように、自分の状況に最も適したものを知っている唯一の方法は、テストすることです。

他のヒント

このビューのための偉大な候補である。

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;

列はテーブルに保持されず、参照するたびにその場で再作成されます。ビューを使用しても同じ結果を得ることができます。計算列でフィルタリング述語または順序付けを使用し、それにインデックスを追加したい場合は、を参照してください。 計算列でのインデックスの作成.

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top