2009-08-13 2 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

관련 문제