column_definition (Transact-SQL)

Определяет свойства столбца, который добавляется в таблицу при помощи инструкции ALTER TABLE.

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

Синтаксис

column_name [ type_schema_name. ] type_name
    [ 
                ( { precision [ , scale ] | max | 
            [ { CONTENT | DOCUMENT } ] xml_schema_collection } ) 
    ] 
    [ FILESTREAM ]
    [ 
        [ CONSTRAINT constraint_name ] DEFAULT constant_expression 
             [ WITH VALUES ] 
        | IDENTITY [ (seed , increment ) ] [ NOT FOR REPLICATION ] 
    ] 
    [ ROWGUIDCOL ] 
    [ COLLATE < collation_name > ] 
    [ <column_constraint> [ ...n ] ] 

Аргументы

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

  • [ type_schema_name**.** ] type_name
    Тип данных добавленного столбца и схема, которой он принадлежит.

    Аргумент type_name может иметь тип данных:

    • системный тип данных Microsoft SQL Server;

    • тип данных псевдонима, основанный на системном типе данных SQL Server. Псевдонимы типов данных должны быть созданы с помощью инструкции CREATE TYPE прежде, чем их можно будет использовать в определении таблицы;

    • определяемый пользователем тип Microsoft .NET Framework и схема, к которой он принадлежит. Определяемые пользователем типы .NET Framework должны быть созданы с помощью инструкции CREATE TYPE прежде, чем их можно будет использовать в определении таблицы.

    Если аргумент type_schema_name не задан, то компонент Microsoft Database Engine ищет тип type_name в следующем порядке:

    • системный тип данных SQL Server;

    • схема по умолчанию текущего пользователя в текущей базе данных;

    • схема dbo текущей базы данных.

  • precision
    Точность для указанного типа данных. Дополнительные сведения о допустимых значениях точности см. в разделе Точность, масштаб и длина.

  • scale
    Масштаб для указанного типа данных. Дополнительные сведения о допустимых значениях масштаба см. в разделе Точность, масштаб и длина (Transact-SQL).

  • max
    Применимо только к типам данных varchar, nvarchar и varbinary. Они используются для хранения 2^31 байт символов или двоичных данных, либо 2^30 байт данных в формате Юникод.

  • CONTENT
    Определяет, что каждый экземпляр типа данных xml в column_name может включать в себя несколько элементов верхнего уровня. Аргумент CONTENT применим только к данным типа xml и может быть указан только в том случае, если одновременно указан аргумент xml_schema_collection. Если он не задан, то CONTENT имеет обычный смысл, заданный по умолчанию.

  • DOCUMENT
    Определяет, что каждый экземпляр типа данных xml в column_name может включать в себя только один элемент верхнего уровня. Аргумент DOCUMENT применим только к данным типа xml и может быть указан только в том случае, если одновременно указан аргумент xml_schema_collection.

  • xml_schema_collection
    Применим только к типу данных xml для коллекции XML-схем, связанной с этим типом. Перед помещением столбца xml в схему она должна быть создана в базе данных при помощи инструкции CREATE XML SCHEMA COLLECTION.

  • FILESTREAM
    При необходимости указывает атрибут хранилища FILESTREAM для столбца, в котором параметр type_name имеет тип данных varbinary(max).

    Если для столбца указан атрибут FILESTREAM, то в таблице также должен быть столбец типа данных uniqueidentifier с атрибутом ROWGUIDCOL. Этот столбец не должен допускать значений NULL и должен иметь относящееся к одному столбцу ограничение UNIQUE или PRIMARY KEY. Значение идентификатора GUID для столбца должно быть предоставлено приложением во время вставки данных или ограничением DEFAULT, в котором используется функция NEWID ().

    Если в таблице определен столбец FILESTREAM, столбец ROWGUIDCOL нельзя удалить и связанные ограничения не могут быть изменены. Столбец ROWGUIDCOL удаляется только после удаления последнего столбца FILESTREAM.

    Если для столбца задан атрибут хранилища FILESTREAM, то все значения для этого столбца хранятся в контейнере данных FILESTREAM в файловой системе.

    Пример использования определения столбца см. в разделе Приступая к работе с хранилищем FILESTREAM.

  • [ CONSTRAINT constraint_name ]
    Определяет начало определения DEFAULT. Для достижения совместимости с более ранними версиями SQL Server для ограничения DEFAULT может быть назначено имя. Аргумент constraint_name должен следовать правилам именования идентификаторов, за исключением того, что имя не может начинаться со знака #. Если аргумент constraint_name не задан, то определению DEFAULT назначается автоматически сформированное имя.

  • DEFAULT
    Ключевое слово, задающее значение по умолчанию для столбца. Определения DEFAULT могут использоваться для указания значений по умолчанию для новых столбцов в существующих строках данных. Определения DEFAULT не могут быть применены к столбцам типа timestamp или к столбцам, имеющим свойство IDENTITY. Если значение по умолчанию указывается для столбца определяемого пользователем типа, этот тип должен поддерживать неявное преобразование выражения constant_expression в определяемый пользователем тип.

  • constant_expression
    Символьное значение, NULL или системная функция, используемая в качестве значения столбца по умолчанию. Если используется в сочетании со столбцом определяемого пользователем типа .NET Framework, то реализация типа должна поддерживать неявное преобразование выражения constant_expression в определяемый пользователем тип.

  • WITH VALUES
    Указывает, что значение, указанное в выражении DEFAULT constant_expression, сохраняется в новом столбце, добавляемом к существующим строкам. Если добавленный столбец допускает значения NULL и указано предложение WITH VALUES, новый столбец, добавленный к существующим строкам, заполняется значением по умолчанию. Если предложение WITH VALUES не указано для столбцов, допускающих значение NULL, новый столбец для существующих строк заполняется значением NULL. Если новый столбец не допускает значения NULL, значение по умолчанию сохраняется во всех строках независимо от того, указано предложение WITH VALUES или нет.

  • IDENTITY
    Указывает, что новый столбец является столбцом идентификаторов. Компонент SQL Server Database Engine присваивает столбцу уникальное возрастающее значение. Когда добавляются столбцы идентификаторов к существующим таблицам, к существующим строкам таблицы добавляются номера идентификаторов с этими значениями начального числа и приращения. Порядок, в котором выполняется обновление строк, не гарантирован. Номера идентификаторов также формируются для всех новых строк, которые добавляются.

    Столбцы идентификаторов часто используются в сочетании с ограничениями PRIMARY KEY, чтобы выступать в качестве уникального числового идентификатора строки таблицы. Свойство IDENTITY может быть назначено только столбцам с числовыми типами tinyint, smallint, int, bigint, decimal(p,0) или numeric(p,0). Возможно создание только одного столбца идентификаторов в каждой таблице. Ключевое слово DEFAULT и значения по умолчанию не могут применяться к столбцам идентификаторов. Начальное значение и шаг приращения для столбца идентификаторов должны быть либо заданы вместе, либо не заданы вообще. Если ничего не указано, применяется значение по умолчанию (1,1). Нельзя изменить существующий столбец таблицы, добавив в него свойство IDENTITY.

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

    Не поддерживается добавление столбца идентификаторов к опубликованной таблице, так как это может привести к расхождению данных при репликации столбца на подписчик. Значения такого столбца на издателе зависят от порядка, в каком строки таблицы хранятся физически. Строки могут быть сохранены на подписчике иначе; следовательно, значение в столбце идентификаторов может отличаться для одних и тех же строк.

    Чтобы запретить свойство IDENTITY столбца и при вставке строк задавать его значения явно, можно воспользоваться инструкцией SET IDENTITY_INSERT.

  • seed
    Значение, используемое для первой строки, загружаемой в таблицу.

  • increment
    Значение приращения, добавляемое к значению столбца предыдущей строки для получения значения столбца новой строки.

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

  • ROWGUIDCOL
    Показывает, что столбец является столбцом глобального уникального идентификатора строки. ROWGUIDCOL может быть назначен только для столбца uniqueidentifier, и только один столбец uniqueidentifier в таблице может быть объявлен как столбец ROWGUIDCOL. ROWGUIDCOL не может быть назначен столбцам с типами, определенными пользователем.

    Свойство ROWGUIDCOL не обеспечивает уникальности значений, хранимых в столбце. Кроме того, оно не производит автоматического формирования значений для новых строк, вставляемых в таблицу. Для формирования уникальных значений для каждого столбца можно использовать функцию NEWID в инструкциях INSERT или определить функцию NEWID как значение по умолчанию для столбца. Дополнительные сведения см. в разделах NEWID (Transact-SQL) и Инструкция INSERT (Transact-SQL).

  • COLLATE < collation_name>
    Задает параметры сортировки для столбца. Если не указано, столбцу назначаются параметры сортировки, принятые в базе данных по умолчанию. Могут использоваться параметры сортировки Windows или параметры сортировки SQL. Список и дополнительные сведения см. в разделах Имя параметров сортировки Windows (Transact-SQL) и Имя параметров сортировки SQL Server (Transact-SQL).

    Предложение COLLATE может быть использовано для изменения параметров сортировки только для столбцов, имеющих тип char, varchar, nchar или nvarchar.

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

Замечания

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

Компонент Database Engine не ограничивает порядок задания свойств DEFAULT, IDENTITY, ROWGUIDCOL или ограничений столбца в определении столбца.

Примеры

Примеры см. в разделе ALTER TABLE (Transact-SQL).