Бөлісу құралы:


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

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр 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 индексированный, но вычисляемый столбец, определенный как a + DATEPART(dd, GETDATE()) не может быть индексирован, так как значение может измениться в последующих вызовах.

  • Вычисляемый столбец не может быть целевым столбцом инструкций INSERT или UPDATE.

  • SET QUOTED_IDENTIFIERON при создании или изменении индексов в вычисляемых столбцах или индексированных представлениях. Дополнительные сведения см. в статье 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. Укажите, сохраняются ли данные, выбрав "Да " или "Нет " в раскрывающемся списке для дочернего свойства Is Persisted .

  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