Указание вычисляемых столбцов в таблице
Область применения: 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_IDENTIFIER
ON
при создании или изменении индексов в вычисляемых столбцах или индексированных представлениях. Дополнительные сведения см. в статье SET QUOTED_IDENTIFIER (Transact-SQL).
Разрешения
Требуется разрешение ALTER на таблицу.
Использование SQL Server Management Studio
Добавление нового вычисляемого столбца
В обозревателе объектовразверните таблицу, в которую нужно добавить новый вычисляемый столбец. Щелкните правой кнопкой мыши Столбцы и выберите Создать столбец.
Введите имя столбца и выберите тип данных по умолчанию (nchar(10)). Ядро СУБД определяет тип данных вычисляемого столбца, применяя правила приоритета типа данных к выражениям, указанным в формуле. Например, если формула ссылается на столбец типа money и столбец типа int, то вычисляемый столбец имеет тип money , поскольку этот тип данных имеет более высокий приоритет. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL).
На вкладке Свойства столбца раскройте свойство Спецификация вычисляемого столбца .
В дочернем свойстве (Формула) введите выражение для этого столбца в ячейку сетки справа. Например, в столбце
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).Укажите, сохраняются ли данные, выбрав "Да " или "Нет " в раскрывающемся списке для дочернего свойства Is Persisted .
В менюФайл выберите Сохранить имя таблицы.
Добавление определения вычисляемого столбца в существующий столбец
- В обозревателе объектовщелкните правой кнопкой мыши таблицу со столбцом, определение которого необходимо изменить, и разверните папку Столбцы .
- Щелкните правой кнопкой мыши столбец, для которого необходимо задать формулу вычисляемого столбца, и выберите пункт Удалить. Нажмите ОК.
- Добавьте новый столбец и укажите формулу вычисляемого столбца в соответствии с предыдущей процедурой, чтобы добавить новый вычисляемый столбец.
Использование 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