2014-02-05 2 views
0

다른 열의 값에 따라 테이블에 열을 포함 할 수 있습니까 (보기가 아님) (예 : SQL SERVER 2008). 즉 "DUEDATE"라는 열을 가질 수 있습니까? "DUEDATE"가> GetDate() 인 경우 상태를 "Now Due"로 변경하는 "STATUS"라는 열이 있습니까? 그렇다면 어떻게 그것을 테이블에 추가합니까?테이블의 CASE 문 사용

+1

모범 사례에서는 다른 테이블에서 파생 될 수있는 열을 보관하지 마십시오. – Miller

+0

나는 이해하지만, 그렇게하기 위해 뷰를 만들었지 만, 뷰에 LEFT JOINED 테이블을 추가하면 전체 쿼리가 너무 느려진다. –

+1

뷰에 LEFT JOINED 테이블을 추가해야하는 이유는 무엇입니까? 기본 테이블의 모든 열을 포함하는보기를 만들고 아래의 내 대답과 같이 CASE 문을 추가하십시오. – Dan

답변

0

예, 당신은 계산 열 생성 할 수 있습니다 :이 비 결정적 열이에 추가 (때문에 때마다 테이블을 사용하는 다른 GETDATE()의 가치)이므로

CREATE TABLE [dbo].[SampleTable](
    [DueDate] [date] NULL, 
    [ComputedValue] AS (CASE WHEN [Duedate] > GETDATE() THEN 'Now Due' ELSE '' END) 
) ON [PRIMARY] 

을 테이블은 선택 쿼리에서 동일한 값을 반환하는 것보다 많은 이점을 제공하지 않습니다.

0

당신은 테이블을 변경하고 계산 된 열을 추가 할 수 있습니다 : 그것은 비 결정적이기 때문에

ALTER TABLE dbo.TheTable 
ADD Status AS CASE WHEN ... 

당신은 그것을 지속 할 수 없으므로 PERSISTED를 추가하거나에 인덱스를 넣어하려고하지 않습니다.

인덱스 관점에서 WHERE Status = 'whatever'을 사용하여 쿼리하지 마십시오. 테이블의 모든 행을 고려해야하기 때문에. 대신 DueDate 및 WHERE DueDate에 대한 인덱스를 사용하십시오. < = GETDATE()