테이블에서 계산 열 지정

적용 대상:SQL ServerAzure SQL 데이터베이스Azure SQL Managed Instance

계산 열은 해당 열에 PERSISTED 표시가 없는 한 테이블에 물리적으로 저장되지 않는 가상의 열입니다. 계산 열 식은 다른 열의 데이터를 사용하여 해당 열이 속한 열의 값을 계산할 수 있습니다. SSMS(SQL Server Management Studio) 또는 T-SQL(Transact-SQL)을 사용하여 SQL Server에서 계산 열 식을 지정할 수 있습니다.

제한 사항

  • 계산 열은 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 사용

새 계산 열 추가하기

  1. 개체 탐색기에서 새 계산 열을 추가할 테이블을 확장합니다. 을 마우스 오른쪽 단추로 클릭하고 새 열을 선택합니다.

  2. 열 이름을 입력하고 기본 데이터 형식(nchar(10))을 수락합니다. 데이터베이스 엔진은 데이터 형식 우선 순위 규칙을 수식에 지정된 식에 적용하여 계산 열의 데이터 형식을 결정합니다. 예를 들어 수식이 money 형식의 열과 int 형식의 열을 참조하는 경우 해당 데이터 형식의 우선 순위가 높으므로 계산 열은 money 형식이 됩니다. 자세한 내용은 데이터 형식 우선 순위(Transact-SQL)를 참조하세요.

  3. 열 속성 탭에서 계산 열 사양 속성을 확장합니다.

  4. (수식) 자식 속성에서 오른쪽에 있는 표 형태 셀에 현재 열의 식을 입력합니다. 예를 들어 SalesTotal 열에 입력한 수식이 SubTotal+TaxAmt+Freight일 경우 이 수식은 테이블의 각 행에 대해 이 열에 값을 추가합니다.

    Important

    수식에서 서로 다른 데이터 형식의 두 식을 결합하면 데이터 형식 우선 순위 규칙은 우선 순위가 더 높은 데이터 형식으로 변환된 우선 순위가 낮은 데이터 형식을 지정합니다. 변환이 암시적으로 지원되지 않으면 Error validating the formula for column column_name. 오류가 반환됩니다. 데이터 형식 충돌을 해결하려면 CAST 또는 CONVERT 함수를 사용합니다. 예를 들어 nvarchar 형식의 열이 int 형식의 열과 결합되는 경우 이 ('Prod'+CONVERT(nvarchar(23),ProductID)) 수식에 표시된 대로 정수 형식을 nvarchar로 변환해야 합니다. 자세한 내용은 CAST 및 CONVERT(Transact-SQL)를 참조하세요.

  5. Is Persisted 자식 속성의 드롭다운에서 또는 아니요를 선택하여 데이터가 지속되는지 여부를 나타냅니다.

  6. 파일 메뉴에서 table_name저장을 선택합니다.

기존 열에 계산 열 정의 추가하기

  1. 개체 탐색기에서 변경할 열이 있는 테이블을 마우스 오른쪽 단추로 클릭하고 Columns 폴더를 확장합니다.
  2. 계산 열 수식을 지정할 열을 마우스 오른쪽 단추로 클릭하고 삭제를 선택합니다. 확인을 선택합니다.
  3. 새 열을 추가하고 이전 절차를 따라 계산 열 수식을 지정하여 새 계산 열을 추가합니다.

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

다음 단계