Указание вычисляемых столбцов в таблице
Вычисляемый столбец представляет собой виртуальный столбец, физически не хранящийся в таблице, если для него не установлен признак PERSISTED. В выражении вычисляемого столбца для вычисления значения могут использоваться данные из других столбцов. Выражение для вычисляемого столбца можно указать в SQL Server 2014 с помощью SQL Server Management Studio или Transact-SQL.
В этом разделе
Перед началом работы
Задание вычисляемого столбца с использованием:
Перед началом
Ограничения
Вычисляемый столбец нельзя использовать ни в качестве определения ограничения DEFAULT или FOREIGN KEY, ни вместе с определением ограничения NOT NULL. Однако если вычисляемый столбец определен детерминированным выражением и тип данных результата допускается для индексных столбцов, то вычисляемый столбец может быть использован как ключевой столбец в индексе или как часть ограничений PRIMARY KEY или UNIQUE. Например, если таблица содержит столбцы a и b со значениями целого типа, то вычисляемый столбец a + b может быть индексирован, но вычисляемый столбец a+DATEPART(dd, GETDATE()) не может быть индексирован, так как значение может меняться при каждом следующем вычислении.
Вычисляемый столбец не может быть целевым столбцом инструкций INSERT или UPDATE.
Безопасность
Разрешения
Требуется разрешение ALTER на таблицу.
Использование среды SQL Server Management Studio
Добавление нового вычисляемого столбца
В обозревателе объектовразверните таблицу, в которую нужно добавить новый вычисляемый столбец. Щелкните правой кнопкой мыши Столбцы и выберите Создать столбец.
Введите имя столбца и выберите тип данных по умолчанию (
nchar
(10)). Компонент Компонент Database Engine определяет тип данных вычисляемого столбца путем применения правил очередности типов данных к выражениям, указанным в формуле. Например, если формула ссылается на столбец типа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).Выберите Да или Нет в раскрывающемся списке для дочернего свойства Материализованный , чтобы указать, следует ли сохранять данные.
В меню Файл выберите команду Сохранитьимя_таблицы.
Добавление определения вычисляемого столбца к существующему столбцу
В обозревателе объектовщелкните правой кнопкой мыши таблицу со столбцом, определение которого необходимо изменить, и разверните папку Столбцы .
Щелкните правой кнопкой мыши столбец, для которого необходимо задать формулу вычисляемого столбца, и выберите пункт Удалить. Нажмите кнопку ОК.
Добавьте новый столбец и укажите формулу вычисляемого столбца в соответствии с предыдущей процедурой, чтобы добавить новый вычисляемый столбец.
Использование Transact-SQL
Добавление вычисляемого столбца при создании таблицы
Установите соединение с компонентом Компонент Database Engine.
На панели «Стандартная» нажмите Создать запрос.
Скопируйте и вставьте следующий пример в окно запроса и нажмите кнопку Выполнить. В этом примере создается таблица с вычисляемым столбцом, который умножает значение столбца
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;
Добавление нового вычисляемого столбца в существующую таблицу
Установите соединение с компонентом Компонент Database Engine.
На панели «Стандартная» нажмите Создать запрос.
Скопируйте и вставьте следующий пример в окно запроса и нажмите кнопку Выполнить. В следующем примере в таблицу, созданную в предыдущем примере, будет добавлен новый столбец.
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.35);
Замена существующего столбца на вычисляемый столбец
Установите соединение с компонентом Компонент Database Engine.
На панели «Стандартная» нажмите Создать запрос.
Чтобы заменить существующий столбец на вычисляемый столбец, нужно удалить и создать повторно вычисляемый столбец. Скопируйте и вставьте следующий пример в окно запроса и нажмите кнопку Выполнить. В следующем примере изменяется столбец, добавленный в предыдущем примере.
ALTER TABLE dbo.Products DROP COLUMN RetailValue; GO ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);
Дополнительные сведения см. в разделе ALTER TABLE (Transact-SQL).