Указание вычисляемых столбцов в таблице
Вычисляемый столбец представляет собой виртуальный столбец, физически не хранящийся в таблице, если для него не установлен признак PERSISTED. В выражении вычисляемого столбца для вычисления значения могут использоваться данные из других столбцов. Можно задать выражение для вычисляемого столбца в SQL Server 2012 с использованием Среда SQL Server Management Studio или Transact-SQL.
В этом разделе
Перед началом работы
Ограничения
Безопасность
Задание вычисляемого столбца с использованием:
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).
Выберите Да или Нет в раскрывающемся списке для дочернего свойства Материализованный, чтобы указать, следует ли сохранять данные.
В меню Файл выберите пункт Сохранить table name.
[В начало]
Добавление определения вычисляемого столбца к существующему столбцу
В обозревателе объектов щелкните правой кнопкой мыши таблицу со столбцом, определение которого необходимо изменить, и разверните папку Столбцы.
Щелкните правой кнопкой мыши столбец, для которого необходимо задать формулу вычисляемого столбца, и выберите пункт Удалить. Нажмите кнопку ОК.
Добавьте новый столбец и укажите формулу вычисляемого столбца в соответствии с предыдущей процедурой, чтобы добавить новый вычисляемый столбец.
[В начало]
Использование 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).
[В начало]