계산 열은 열이 PERSISTED로 표시되지 않는 한 테이블에 물리적으로 저장되지 않는 가상 열입니다. 계산 열 식은 다른 열의 데이터를 사용하여 해당 열이 속한 열의 값을 계산할 수 있습니다. SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server 2014에서 계산 열에 대한 식을 지정할 수 있습니다.
이 항목에서
시작하기 전 주의 사항:
계산 열을 지정하려면 다음을 사용하세요.
시작하기 전에
한계 및 제한사항
계산 열은 DEFAULT나 외래 키 제약 조건 정의 또는 NOT NULL 제약 조건 정의로 사용할 수 없습니다. 그러나 계산 열 값이 결정적 식에 의해 정의되고 결과의 데이터 형식이 인덱스 열에서 허용되는 경우 계산 열을 인덱스의 키 열 또는 PRIMARY KEY 또는 UNIQUE 제약 조건의 일부로 사용할 수 있습니다. 예를 들어 테이블에 a와 b 정수 열이 있는 경우 계산 열 a + b를 인덱싱할 수 있지만 이후 호출에서 값이 변경될 수 있으므로 + DATEPART(dd, GETDATE()) 계산 열을 인덱싱할 수 없습니다.
계산 열은 INSERT 또는 UPDATE 문의 대상이 될 수 없습니다.
안전
권한
테이블에 대한 ALTER 사용 권한이 필요합니다.
SQL Server Management Studio 사용
새 계산 열을 추가하려면
개체 탐색기에서 새 계산 열을 추가할 테이블을 확장합니다. 열 을 마우스 오른쪽 단추로 클릭하고 새 열을 선택합니다.
열 이름을 입력하고 기본 데이터 형식((
nchar10)을 적용합니다. 데이터베이스 엔진은 데이터 형식 우선 순위 규칙을 수식에 지정된 식에 적용하여 계산 열의 데이터 형식을 결정합니다. 예를 들어, 수식이 타입money열과 타입int열을 참조하는 경우, 해당 데이터 타입의 우선순위가 더 높기 때문에 계산된 열은 타입money이 됩니다. 자세한 내용은 데이터 형식 우선 순위(Transact-SQL)를 참조하세요.열 속성 탭에서 계산 열 사양 속성을 확장합니다.
(수식) 자식 속성에서 오른쪽에 있는 표 형태 셀에 현재 열의 식을 입력합니다. 예를 들어
SalesTotal열에 입력한 수식이SubTotal+TaxAmt+Freight일 경우 이 수식은 테이블의 각 행에 대해 이 열에 값을 추가합니다.중요합니다
수식에서 서로 다른 데이터 형식의 두 식을 결합하면, 데이터 형식 우선 순위 규칙에 따라 우선 순위가 낮은 데이터 형식이 우선 순위가 더 높은 데이터 형식으로 변환됩니다. 변환이 지원되는 암시적 변환이 아니면 "
Error validating the formula for column column_name." 오류가 반환됩니다. CAST 또는 CONVERT 함수를 사용하여 데이터 형식 충돌을 해결합니다. 예를 들어,nvarchar형식의 열이int형식의 열과 결합된 경우, 이 수식('Prod'+CONVERT(nvarchar(23),ProductID))에 표시된 대로 정수 형식은nvarchar으로 변환되어야 합니다. 자세한 내용은 CAST 및 CONVERT(Transact-SQL)를 참조하세요.Is Persisted 자식 속성의 드롭다운에서 예 또는 아니요를 선택하여 데이터가 유지되는지 여부를 나타냅니다.
파일 메뉴에서 ‘테이블 이름’ 저장을 클릭합니다.
기존 열에 계산 열 정의를 추가하려면
개체 탐색기에서 변경할 열이 있는 테이블을 마우스 오른쪽 단추로 클릭하고 Columns 폴더를 확장합니다.
계산 열 수식을 지정할 열을 마우스 오른쪽 단추로 클릭하고 삭제를 클릭합니다. OK를 클릭합니다.
새 열을 추가하고 이전 절차를 따라 계산 열 수식을 지정하여 새 계산 열을 추가합니다.
Transact-SQL 사용
테이블을 만들 때 계산 열을 추가하려면
데이터베이스 엔진에 연결합니다.
표준 도구 모음에서 새 쿼리를 클릭합니다.
다음 예시를 복사하여 쿼리 창에 붙여 넣은 다음 실행을 클릭합니다. 이 예제에서는
QtyAvailable열의 값과UnitPrice열의 값을 곱하는 계산된 열이 있는 테이블을 만듭니다.CREATE TABLE dbo.Products ( ProductID int IDENTITY (1,1) NOT NULL , QtyAvailable smallint , UnitPrice money , InventoryValue AS QtyAvailable * UnitPrice ); -- Insert values into the table. INSERT INTO dbo.Products (QtyAvailable, UnitPrice) VALUES (25, 2.00), (10, 1.5); -- Display the rows in the table. SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue FROM dbo.Products;
기존 테이블에 새 계산 열을 추가하려면
데이터베이스 엔진에 연결합니다.
표준 도구 모음에서 새 쿼리를 클릭합니다.
다음 예시를 복사하여 쿼리 창에 붙여 넣은 다음 실행을 클릭합니다. 다음 예제에서는 새 열을 이전 예제에서 만든 테이블에 추가합니다.
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.35);
기존 열을 계산 열로 변경하려면
데이터베이스 엔진에 연결합니다.
표준 도구 모음에서 새 쿼리를 클릭합니다.
기존 열을 계산 열로 변경하려면 계산 열을 삭제하고 다시 만들어야 합니다. 다음 예시를 복사하여 쿼리 창에 붙여 넣은 다음 실행을 클릭합니다. 다음 예제에서는 이전 예제에서 추가된 열을 수정합니다.
ALTER TABLE dbo.Products DROP COLUMN RetailValue; GO ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);자세한 내용은 ALTER TABLE(Transact-SQL)을 참조하세요.