테이블에서 계산 열 지정Specify Computed Columns in a Table

이 항목은 다음에 적용됩니다. 예SQL Server(2016부터)예Azure SQL Database아니요Azure SQL Data Warehouse아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

계산 열은 해당 열에 PERSISTED 표시가 없는 한 테이블에 물리적으로 저장되지 않는 가상의 열입니다.A computed column is a virtual column that is not physically stored in the table, unless the column is marked PERSISTED. 계산 열 식에서는 이 식이 속한 열의 값을 계산하기 위해 다른 열의 데이터를 사용할 수 있습니다.A computed column expression can use data from other columns to calculate a value for the column to which it belongs. SQL Server 2017SQL Server 2017 에서는 SQL Server Management StudioSQL Server Management Studio 또는 Transact-SQLTransact-SQL을 사용하여 계산 열의 식을 지정할 수 있습니다.You can specify an expression for a computed column in in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

항목 내용In This Topic

시작하기 전 주의 사항Before You Begin

제한 사항Limitations and Restrictions

  • 계산 열은 DEFAULT 또는 FOREIGN KEY 제약 조건 정의로 사용하거나 NOT NULL 제약 조건 정의와 함께 사용할 수 없습니다.A computed column cannot be used as a DEFAULT or FOREIGN KEY constraint definition or with a NOT NULL constraint definition. 그러나 계산 열 값이 명확한 식에 의해 정의되고 결과의 데이터 형식이 인덱스 열에 허용되는 경우에는 계산 열을 인덱스의 키 열이나 PRIMARY KEY 또는 UNIQUE 제약 조건의 일부로 사용할 수 있습니다.However, if the computed column value is defined by a deterministic expression and the data type of the result is allowed in index columns, a computed column can be used as a key column in an index or as part of any PRIMARY KEY or UNIQUE constraint. 예를 들어 테이블에 a와 b라는 정수 열이 있을 때 계산 열 a + b에는 인덱스를 작성할 수 있지만 계산 열 a+DATEPART(dd, GETDATE())는 다음 호출 시 값이 바뀌므로 인덱스를 작성할 수 없습니다.For example, if the table has integer columns a and b, the computed column a + b may be indexed, but computed column a + DATEPART(dd, GETDATE()) cannot be indexed, because the value might change in subsequent invocations.

  • 계산 열은 INSERT 또는 UPDATE 문의 대상이 될 수 없습니다.A computed column cannot be the target of an INSERT or UPDATE statement.

보안Security

사용 권한Permissions

테이블에 대한 ALTER 사용 권한이 필요합니다.Requires ALTER permission on the table.

SQL Server Management Studio 사용Using SQL Server Management Studio

새 계산 열을 추가하려면To add a new computed column

  1. 개체 탐색기에서 새 계산 열을 추가할 테이블을 확장합니다.In Object Explorer, expand the table for which you want to add the new computed column. 을 마우스 오른쪽 단추로 클릭하고 새 열을 선택합니다.Right-click Columns and select New Column.

  2. 열 이름을 입력하고 기본 데이터 형식(nchar(10))을 적용합니다.Enter the column name and accept the default data type (nchar(10)). 데이터베이스 엔진Database Engine 에서는 수식에 지정된 식에 데이터 형식 우선 순위 규칙을 적용하여 계산 열의 데이터 형식을 결정합니다.The 데이터베이스 엔진Database Engine determines the data type of the computed column by applying the rules of data type precedence to the expressions specified in the formula. 예를 들어 수식에서 money 형식 열과 int형식 열을 참조하는 경우 데이터 형식의 우선 순위가 더 높으므로 계산 열은 money 형식입니다.For example, if the formula references a column of type money and a column of type int, the computed column will be of type money because that data type has the higher precedence. 자세한 내용은 데이터 형식 우선 순위(Transact-SQL)를 참조하세요.For more information, see Data Type Precedence (Transact-SQL).

  3. 열 속성 탭에서 계산 열 사양 속성을 확장합니다.In the Column Properties tab, expand the Computed Column Specification property.

  4. (수식) 자식 속성에서 오른쪽에 있는 표 형태 셀에 현재 열의 식을 입력합니다.In the (Formula) child property, enter the expression for this column in the grid cell to the right. 예를 들어 SalesTotal 열에 입력한 수식이 SubTotal+TaxAmt+Freight일 경우 이 수식은 테이블의 각 행에 대해 이 열에 값을 추가합니다.For example, in a SalesTotal column, the formula you enter might be SubTotal+TaxAmt+Freight, which adds the value in these columns for each row in the table.

    중요

    수식으로 데이터 형식이 다른 두 식을 결합할 경우 데이터 형식 우선 순위 규칙에 따라 우선 순위가 낮은 데이터 형식이 우선 순위가 높은 데이터 형식으로 변환됩니다.When a formula combines two expressions of different data types, the rules for data type precedence specify that the data type with the lower precedence is converted to the data type with the higher precedence. 이 암시적 변환이 지원되지 않으면 "Error validating the formula for column column_name." 오류가 반환됩니다.If the conversion is not a supported implicit conversion, the error "Error validating the formula for column column_name." is returned. CAST 또는 CONVERT 함수를 사용하여 데이터 형식 충돌을 해결합니다.Use the CAST or CONVERT function to resolve the data type conflict. 예를 들어 nvarchar 형식 열을 int형식 열과 결합할 경우 수식에 표시된 대로 정수 형식을 nvarchar ('Prod'+CONVERT(nvarchar(23),ProductID))로 변환해야 합니다.For example, if a column of type nvarchar is combined with a column of type int, the integer type must be converted to nvarchar as shown in this formula ('Prod'+CONVERT(nvarchar(23),ProductID)). 자세한 내용은 CAST 및 CONVERT(Transact-SQL)를 참조하세요.For more information, see CAST and CONVERT (Transact-SQL).

  5. 지속형 자식 속성 드롭다운에서 또는 아니요를 선택하여 데이터를 지속할지 여부를 지정합니다.Indicate whether the data is persisted by choosing Yes or No from the drop-down for the Is Persisted child property.

  6. 파일 메뉴에서 저장table name을 클릭합니다.On the File menu, click Savetable name.

기존 열에 계산 열 정의를 추가하려면To add a computed column definition to an existing column

  1. 개체 탐색기에서 변경할 열이 포함된 테이블을 마우스 오른쪽 단추로 클릭하고 폴더를 확장합니다.In Object Explorer, right-click the table with the column for which you want to change and expand the Columns folder.

  2. 계산 열 수식을 지정할 열을 마우스 오른쪽 단추로 클릭하고 삭제를 클릭합니다.Right-click the column for which you want to specify a computed column formula and click Delete. 확인을 클릭합니다.Click OK.

  3. 새 열을 추가하고 이전 절차에 따라 새 계산 열을 추가하여 계산 열 수식을 지정합니다.Add a new column and specify the computed column formula by following the previous procedure to add a new computed column.

Transact-SQL 사용Using Transact-SQL

테이블을 만들 때 계산 열을 추가하려면To add a computed column when creating a table

  1. 데이터베이스 엔진Database Engine에 연결합니다.Connect to the 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.From the Standard bar, click New Query.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣은 후 실행을 클릭합니다.Copy and paste the following example into the query window and then click Execute. 이 예에서는 QtyAvailable 열의 값을 UnitPrice 열의 값으로 곱하는 계산 열을 포함하는 테이블을 만듭니다.The example creates a table with a computed column that multiplies the value in the QtyAvailable column times the value in the UnitPrice column.

    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;  
    

기존 테이블에 새 계산 열을 추가하려면To add a new computed column to an existing table

  1. 데이터베이스 엔진Database Engine에 연결합니다.Connect to the 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.From the Standard bar, click New Query.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣은 후 실행을 클릭합니다.Copy and paste the following example into the query window and then click Execute. 다음 예에서는 이전 예에서 만든 테이블에 새 열을 추가합니다.The following example adds a new column to the table created in the previous example.

    ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.35);  
    

기존 열을 계산 열로 변경하려면To change an existing column to a computed column

  1. 데이터베이스 엔진Database Engine에 연결합니다.Connect to the 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.From the Standard bar, click New Query.

  3. 기존 열을 계산 열로 변경하려면 계산 열을 삭제한 후 다시 만들어야 합니다.To change an existing column to a computed column you must drop and re-create the computed column. 다음 예를 복사하여 쿼리 창에 붙여 넣은 후 실행을 클릭합니다.Copy and paste the following example into the query window and then click Execute. 다음 예에서는 이전 예에서 추가한 열을 수정합니다.The following example modifies the column added in the previous example.

    ALTER TABLE dbo.Products DROP COLUMN RetailValue;  
    GO  
    ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);  
    

    자세한 내용은 ALTER TABLE(Transact-SQL)을 참조하세요.For more information, see ALTER TABLE (Transact-SQL).