Указание вычисляемых столбцов в таблице

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

Вычисляемый столбец представляет собой виртуальный столбец, физически не хранящийся в таблице, если для него не установлен признак PERSISTED. В выражении вычисляемого столбца для вычисления значения могут использоваться данные из других столбцов. Вы можете указать выражение для вычисляемого столбца в SQL Server с помощью SQL Server Management Studio (SSMS) или Transact-SQL (T-SQL).

Ограничения

  • Вычисляемый столбец нельзя использовать в качестве определения ограничения DEFAULT или FOREIGN KEY или с определением ограничения NOT NULL. Однако если вычисляемый столбец определен детерминированным выражением и тип данных результата допускается для индексных столбцов, то вычисляемый столбец может быть использован как ключевой столбец в индексе или как часть ограничений PRIMARY KEY или UNIQUE. Например, если в таблице есть целые столбцы a и b, вычисляемый столбец a + b может быть индексирован, но вычисляемый столбец + DATEPART(dd, GETDATE()) не может быть индексирован, так как значение может измениться в последующих вызовах.
  • Вычисляемый столбец не может быть целевым столбцом инструкций INSERT или UPDATE.
  • SET QUOTED_IDENTIFIER при создании или изменении индексов в вычисляемых столбцах или индексированных представлениях должно быть включено. Дополнительные сведения см. в статье 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, чтобы добавить значения в этих столбцах для каждой строки в таблице.

    Внимание

    Если формула связывает два выражения различных типов данных, то по правилам приоритета типов данных определяется, какой тип данных имеет меньший приоритет и будет преобразован в тип данных с большим приоритетом. Если преобразование не поддерживается неявным преобразованием, возвращается ошибка Error validating the formula for column column_name. . Используйте функцию CAST или CONVERT, чтобы устранить конфликт типа данных. Например, если столбец типа nvarchar объединяется со столбцом типа int, то целочисленный тип необходимо преобразовать в nvarchar , как показано в следующей формуле: ('Prod'+CONVERT(nvarchar(23),ProductID)). Дополнительные сведения см. в разделе Функции CAST и CONVERT (Transact-SQL).

  5. Выберите Да или Нет в раскрывающемся списке для дочернего свойства Материализованный , чтобы указать, следует ли сохранять данные.

  6. В меню "Файл" выберите "Сохранитьимя таблицы".

Добавление определения вычисляемого столбца к существующему столбцу

  1. В обозревателе объектовщелкните правой кнопкой мыши таблицу со столбцом, определение которого необходимо изменить, и разверните папку Столбцы .
  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

Далее