Указание вычисляемых столбцов в таблицеSpecify Computed Columns in a Table

ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ: даSQL Server (начиная с 2016)даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseTHIS 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

PermissionsPermissions

Требуется разрешение ALTER на таблицу.Requires ALTER permission on the table.

Использование среды SQL Server Management StudioUsing 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 EngineDatabase Engine определяет тип данных вычисляемого столбца путем применения правил очередности типов данных к выражениям, указанным в формуле.The Компонент Database EngineDatabase 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. В меню Файл выберите пункт Сохранитьимя_таблицы.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-SQLUsing Transact-SQL

Добавление вычисляемого столбца при создании таблицыTo add a computed column when creating a table

  1. Установите соединение с компонентом Компонент Database EngineDatabase Engine.Connect to the Компонент Database EngineDatabase 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 EngineDatabase Engine.Connect to the Компонент Database EngineDatabase 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 EngineDatabase Engine.Connect to the Компонент Database EngineDatabase 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).