computed_column_definition (Transact-SQL)

Указывает свойства вычисляемого столбца, который добавляется в таблицу с помощью инструкции ALTER TABLE.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

column_name AS computed_column_expression
[ PERSISTED [ NOT NULL ] ]
[ 
    [ CONSTRAINT constraint_name ]
    { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]
        [ WITH FILLFACTOR = fillfactor ]
        [ WITH ( <index_option> [, ...n ] ) ]
        [ ON { partition_scheme_name (partition_column_name ) | filegroup 
            | "default" } ]
    | [ FOREIGN KEY ] 
        REFERENCES ref_table [ ( ref_column ) ] 
        [ ON DELETE { NO ACTION | CASCADE } ] 
        [ ON UPDATE { NO ACTION } ] 
        [ NOT FOR REPLICATION ] 
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )
]

Аргументы

  • column_name
    Имя столбца, который должен быть изменен, добавлен или удален. Аргумент column_name может содержать от 1 до 128 символов. Для новых столбцов аргумент column_name может быть опущен для столбцов типа timestamp. Если column_name не указано для столбца с типом данныхtimestamp, то используется имя timestamp.

  • computed_column_expression
    Выражение, определяющее значение вычисляемого столбца. Вычисляемый столбец является виртуальным столбцом, который физически не хранится в таблице, а вычисляется с помощью некоторого выражения, использующего другие столбцы данной таблицы. Например, вычисляемый столбец может иметь следующее определение: cost AS price * qty. Выражение может содержать имя невычисляемого столбца, константу, функцию, переменную или любое их сочетание, соединенное одним или несколькими операторами. Выражение не может быть вложенным запросом или включать псевдоним типа данных.

    Вычисляемые столбцы могут использоваться в списках выбора, предложениях WHERE и ORDER BY или в любых других местах, в которых могут использоваться регулярные выражения, за исключением следующих случаев.

    • Вычисляемый столбец нельзя использовать ни в качестве определения ограничения DEFAULT или FOREIGN KEY, ни вместе с определением ограничения NOT NULL. Однако если вычисляемый столбец определен детерминированным выражением и тип данных результата допускается для индексных столбцов, то вычисляемый столбец может быть использован как ключевой столбец в индексе или как часть ограничений PRIMARY KEY или UNIQUE.

      Например, если таблица содержит столбцы a и b со значениями целого типа, то вычисляемый столбец a + b может быть индексирован, но вычисляемый столбец a+DATEPART(dd, GETDATE()) не может быть индексирован, так как значение может меняться при каждом следующем вычислении.

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

      ПримечаниеПримечание

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

  • PERSISTED
    Указывает, что компонент Database Engine будет физически хранить вычисляемые значения в таблице и обновлять их при изменении любого столбца, от которого зависит вычисляемый столбец. Пометка вычисляемого столбца признаком PERSISTED позволяет создать индекс на детерминистическом, но не точном вычисляемом столбце. Дополнительные сведения см. в разделе Создание индексов вычисляемых столбцов. Все вычисляемые столбцы, используемые как столбцы секционирования секционированных таблиц, должны быть помечены как PERSISTED. Значение параметра computed_column_expression должно быть детерминированным, если указано предложение PERSISTED.

  • NULL | NOT NULL
    Указывает, допустимы ли для столбца значения NULL. Предложение NULL не является ограничением в строгом смысле слова, но может быть указано так же, как и NOT NULL. Ограничение NOT NULL может быть указано для вычисляемых столбцов только в том случае, если одновременно указан параметр PERSISTED.

  • CONSTRAINT
    Указывает начало определения для ограничений PRIMARY KEY или UNIQUE.

  • constraint_name
    Новое ограничение. Имена ограничений должны подчиняться правилам для идентификаторов, за исключением того, что не могут начинаться со знака числа (#). Если аргумент constraint_name не указан, ограничению присваивается имя, формируемое системой.

  • PRIMARY KEY
    Ограничение, выполняющее принудительную проверку целостности для указанного столбца или столбцов при использовании уникального индекса. Для каждой таблицы может быть создано только одно ограничение PRIMARY KEY.

  • UNIQUE
    Ограничение, обеспечивающее целостность сущностей для указанного столбца или столбцов за счет использования уникального индекса.

  • CLUSTERED | NONCLUSTERED
    Указывает, что для ограничения PRIMARY KEY или UNIQUE создается кластеризованный или некластеризованный индекс. По умолчанию ограничения PRIMARY KEY имеют значение CLUSTERED. По умолчанию ограничения UNIQUE имеют значение NONCLUSTERED.

    Если кластеризованное ограничение или индекс уже созданы в таблице, значение CLUSTERED не может быть задано. Если кластеризованное ограничение или индекс уже существует в таблице, ограничения PRIMARY KEY по умолчанию имеют значение NONCLUSTERED.

  • WITH FILLFACTOR = fillfactor
    Указывает, насколько полно компонент SQL Server Database Engine должен заполнять каждую страницу индекса, используемую для хранения индексных данных. Пользователем могут быть заданы значения аргумента fillfactor в диапазоне от 1 до 100. Если значение не задано, принимается значение 0.

    Важное примечаниеВажно!

    Описание выражения WITH FILLFACTOR = fillfactor как единственного параметра индекса, применимого к ограничениям PRIMARY KEY или UNIQUE, сохранено для обеспечения обратной совместимости, но в будущих выпусках это выражение документировано не будет. Другие параметры индекса можно указать в предложении index_option (Transact-SQL) инструкции ALTER TABLE.

  • FOREIGN KEY REFERENCES
    Ограничение, которое обеспечивает ссылочную целостность данных в этом столбце или столбцах. Ограничения FOREIGN KEY требуют, чтобы каждое значение в столбце существовало в соответствующем связанном столбце или столбцах в связанной таблице. Ограничения FOREIGN KEY могут ссылаться только на столбцы, являющиеся ограничениями PRIMARY KEY или UNIQUE в связанной таблице или на столбцы, на которые имеются ссылки в индексе UNIQUE INDEX связанной таблицы. Внешние ключи в вычисляемых столбцах должны быть также помечены как PERSISTED.

  • ref_table
    Имя таблицы, на которую ссылается ограничение FOREIGN KEY.

  • ( ref_column )
    Столбец из таблицы, на которую ссылается ограничение FOREIGN KEY.

  • ON DELETE { NO ACTION | CASCADE }
    Указывает, какую операцию выполнять над строками таблицы, если эти строки имеют ссылочную связь, и строка, на которую существует ссылка, удаляется из родительской таблицы. Параметр по умолчанию — NO ACTION.

    • NO ACTION
      Компонент Database Engine формирует ошибку, и выполняется откат операции удаления строки из родительской таблицы.

    • CASCADE
      Если из родительской таблицы удаляется строка, соответствующие строки удаляются и из ссылающейся таблицы.

    Например, в базе данных База данных AdventureWorks2008R2 таблица ProductVendor имеет ссылочную связь с таблицей Vendor. Внешний ключ ProductVendor.BusinessEntityID ссылается на первичный ключ Vendor.BusinessEntityID.

    Если над строкой в таблице Vendor выполняется инструкция DELETE и для внешнего ключа ProductVendor.BusinessEntityID указано действие ON DELETE CASCADE, то компонент Database Engine проверит наличие одной или нескольких зависимых записей в таблице ProductVendor. Если они существуют, то, в добавление к строке, на которую существует ссылка из таблицы Vendor, будут удалены зависимые строки в таблице ProductVendor.

    В противном случае, если задано значение NO ACTION, компонент Database Engine вызывает ошибку и откатывает действие по удалению строки из таблицы Vendor, если хотя бы одна строка в таблице ProductVendor ссылается на нее.

    Не следует использовать параметр CASCADE, если таблица будет включена в публикацию слиянием, в которой используются логические записи. Дополнительные сведения о логических записях см. в разделе Изменения группирования связанных строк с логическими записями.

  • ON UPDATE { NO ACTION }
    Указывает, какая операция совершается над строками в таблице, когда эти строки имеют ссылочную связь, а строка родительской таблицы, на которую указывает ссылка, обновляется. Если указано NO ACTION, то компонент Database Engine вызывает ошибку и откатывает операцию обновления строки таблицы Vendor, если на нее ссылается хотя бы одна строка таблицы ProductVendor.

  • NOT FOR REPLICATION
    Может быть определено для ограничений FOREIGN KEY и CHECK. Если ограничение сопровождается этим предложением, оно не выполняется, когда агенты репликации выполняют операции вставки, обновления или удаления. Дополнительные сведения см. в разделе Управление ограничениями, идентификаторами и триггерами с помощью параметра «NOT FOR REPLICATION».

  • CHECK
    Ограничение, обеспечивающее целостность домена путем ограничения возможных значений, которые могут быть введены в столбец или столбцы. Ограничения CHECK в вычисляемых столбцах должны быть также помечены как PERSISTED.

  • logical_expression
    Логическое выражение, возвращающее значения TRUE или FALSE. Выражение не может содержать ссылку на псевдоним типа данных.

  • ON { partition_scheme_name (partition_column_name) | filegroup| "default"}
    Указывает место хранения индекса, созданного для ограничения. Если определен аргумент partition_scheme_name, индекс разделяется на секции, которые сопоставляются с файловыми группами, определенными аргументом partition_scheme_name. Если определен аргумент filegroup, индекс создается в именованной файловой группе. Если указан аргумент "default" или предложение ON не определено вообще, индекс создается в той же файловой группе, что и таблица. Если при добавлении кластеризованного индекса для ограничений PRIMARY KEY или UNIQUE указано предложение ON, то вся таблица перемещается в указанную файловую группу в момент создания этого индекса.

    ПримечаниеПримечание

    В этом контексте default не является ключевым словом. Это идентификатор файловой группы по умолчанию, и он должен быть заключен в разделители, как в выражениях ON "default" или ON [default]. Если указано значение "default", то параметру QUOTED_IDENTIFIER для текущего сеанса должно быть присвоено значение ON. Это параметр по умолчанию. Дополнительные сведения см. в разделе SET QUOTED_IDENTIFIER (Transact-SQL).

Замечания

Каждое ограничение PRIMARY KEY или UNIQUE создает индекс. Число ограничений UNIQUE и PRIMARY KEY не может стать причиной превышения предела на количество индексов на таблицу в 999 некластеризованных индексов и 1 кластеризованный индекс.