Поделиться через


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

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

Добавление нового вычисляемого столбца

  1. В обозревателе объектов разверните таблицу, в которую нужно добавить новый вычисляемый столбец. Щелкните правой кнопкой мыши Столбцы и выберите Создать столбец.

  2. Введите имя столбца и выберите тип данных по умолчанию (nchar (10)). Компонент Компонент Database Engine определяет тип данных вычисляемого столбца путем применения правил очередности типов данных к выражениям, указанным в формуле. Например, если формула ссылается на столбец типа 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. В меню Файл выберите пункт Сохранить table name.

Значок стрелки, используемый со ссылкой «В начало»[В начало]

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

  1. В обозревателе объектов щелкните правой кнопкой мыши таблицу со столбцом, определение которого необходимо изменить, и разверните папку Столбцы.

  2. Щелкните правой кнопкой мыши столбец, для которого необходимо задать формулу вычисляемого столбца, и выберите пункт Удалить. Нажмите кнопку ОК.

  3. Добавьте новый столбец и укажите формулу вычисляемого столбца в соответствии с предыдущей процедурой, чтобы добавить новый вычисляемый столбец.

Значок стрелки, используемый со ссылкой «В начало»[В начало]

Использование Transact-SQL

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

  1. Установите соединение с компонентом Компонент Database Engine.

  2. На панели «Стандартная» нажмите Создать запрос.

  3. Скопируйте и вставьте следующий пример в окно запроса и нажмите кнопку Выполнить. В этом примере создается таблица с вычисляемым столбцом, который умножает значение столбца 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;
    

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

  1. Установите соединение с компонентом Компонент Database Engine.

  2. На панели «Стандартная» нажмите Создать запрос.

  3. Скопируйте и вставьте следующий пример в окно запроса и нажмите кнопку Выполнить. В следующем примере в таблицу, созданную в предыдущем примере, будет добавлен новый столбец.

    ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.35);
    

Замена существующего столбца на вычисляемый столбец

  1. Установите соединение с компонентом Компонент Database Engine.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Чтобы заменить существующий столбец на вычисляемый столбец, нужно удалить и создать повторно вычисляемый столбец. Скопируйте и вставьте следующий пример в окно запроса и нажмите кнопку Выполнить. В следующем примере изменяется столбец, добавленный в предыдущем примере.

    ALTER TABLE dbo.Products DROP COLUMN RetailValue;
    GO
    ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);
    

    Дополнительные сведения см. в разделе ALTER TABLE (Transact-SQL).

Значок стрелки, используемый со ссылкой «В начало»[В начало]