테이블에서 계산 열 지정
적용 대상: SQL Server Azure SQL 데이터베이스
Azure SQL Managed Instance
계산 열은 해당 열에 PERSISTED 표시가 없는 한 테이블에 물리적으로 저장되지 않는 가상의 열입니다. 계산 열 식에서는 이 식이 속한 열의 값을 계산하기 위해 다른 열의 데이터를 사용할 수 있습니다. SQL Server에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 계산 열의 식을 지정할 수 있습니다.
제한 사항
- 계산 열은 DEFAULT 또는 FOREIGN KEY 제약 조건 정의로 사용하거나 NOT NULL 제약 조건 정의와 함께 사용할 수 없습니다. 그러나 계산 열 값이 명확한 식에 의해 정의되고 결과의 데이터 형식이 인덱스 열에 허용되는 경우에는 계산 열을 인덱스의 키 열이나 PRIMARY KEY 또는 UNIQUE 제약 조건의 일부로 사용할 수 있습니다. 예를 들어 테이블에 a와 b라는 정수 열이 있을 때 계산 열 a + b에는 인덱스를 작성할 수 있지만 계산 열 a+DATEPART(dd, GETDATE())는 다음 호출 시 값이 바뀌므로 인덱스를 작성할 수 없습니다.
- 계산 열은 INSERT 또는 UPDATE 문의 대상이 될 수 없습니다.
- 계산 열이나 인덱싱된 뷰에서 인덱스를 만들거나 변경하는 경우
SET QUOTED_IDENTIFIER
를 ON으로 설정해야 합니다. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하세요.
권한
테이블에 대한 ALTER 사용 권한이 필요합니다.
SQL Server Management Studio 사용
새 계산 열을 추가하려면
개체 탐색기에서 새 계산 열을 추가할 테이블을 확장합니다. 열 을 마우스 오른쪽 단추로 클릭하고 새 열을 선택합니다.
열 이름을 입력하고 기본 데이터 형식(nchar(10))을 적용합니다. 데이터베이스 엔진 에서는 수식에 지정된 식에 데이터 형식 우선 순위 규칙을 적용하여 계산 열의 데이터 형식을 결정합니다. 예를 들어 수식에서 money 형식 열과 int형식 열을 참조하는 경우 데이터 형식의 우선 순위가 더 높으므로 계산 열은 money 형식입니다. 자세한 내용은 데이터 형식 우선 순위(Transact-SQL)를 참조하세요.
열 속성 탭에서 계산 열 사양 속성을 확장합니다.
(수식) 자식 속성에서 오른쪽에 있는 표 형태 셀에 현재 열의 식을 입력합니다. 예를 들어
SalesTotal
열에 입력한 수식이SubTotal+TaxAmt+Freight
일 경우 이 수식은 테이블의 각 행에 대해 이 열에 값을 추가합니다.중요
수식으로 데이터 형식이 다른 두 식을 결합할 경우 데이터 형식 우선 순위 규칙에 따라 우선 순위가 낮은 데이터 형식이 우선 순위가 높은 데이터 형식으로 변환됩니다. 이 암시적 변환이 지원되지 않으면 "
Error validating the formula for column column_name.
" 오류가 반환됩니다. CAST 또는 CONVERT 함수를 사용하여 데이터 형식 충돌을 해결합니다. 예를 들어 nvarchar 형식 열을 int형식 열과 결합할 경우 수식에 표시된 대로 정수 형식을 nvarchar('Prod'+CONVERT(nvarchar(23),ProductID))
로 변환해야 합니다. 자세한 내용은 CAST 및 CONVERT(Transact-SQL)를 참조하세요.지속형 자식 속성 드롭다운에서 예 또는 아니요 를 선택하여 데이터를 지속할지 여부를 지정합니다.
파일 메뉴에서 table_name저장을 선택합니다.
기존 열에 계산 열 정의를 추가하려면
- 개체 탐색기에서 변경할 열이 포함된 테이블을 마우스 오른쪽 단추로 클릭하고 열 폴더를 확장합니다.
- 계산 열 수식을 지정할 열을 마우스 오른쪽 단추로 클릭하고 삭제를 선택합니다. 확인을 선택합니다.
- 새 열을 추가하고 이전 절차에 따라 새 계산 열을 추가하여 계산 열 수식을 지정합니다.
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;
-- Update values in the table.
UPDATE dbo.Products
SET UnitPrice = 2.5
WHERE ProductID = 1;
-- Display the rows in the table, and the new values for UnitPrice and InventoryValue.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products;
기존 테이블에 새 계산 열을 추가하려면
다음 예에서는 이전 예에서 만든 테이블에 새 열을 추가합니다.
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);
필요에 따라 계산 값을 물리적으로 테이블에 저장하는 PERSISTED 인수를 추가합니다.
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5) PERSISTED;
기존 열을 계산 열로 변경하려면
다음 예에서는 이전 예에서 추가한 열을 수정합니다.
ALTER TABLE dbo.Products DROP COLUMN RetailValue;
GO
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);
GO