column_definition (Transact-SQL)

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

Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).

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

Синтаксис

column_name <data_type>
    [ FILESTREAM ]
    [ COLLATE collation_name ] 
    [ NULL | NOT NULL ]
    [ 
        [ CONSTRAINT constraint_name ] DEFAULT constant_expression [ WITH VALUES ] 
      | IDENTITY [ ( seed , increment ) ] [ NOT FOR REPLICATION ] 
    ]
    [ ROWGUIDCOL ] 
    [ SPARSE ] 
    [ <column_constraint> [ ...n ] ]

<data type> ::= 
[ type_schema_name . ] type_name 
    [ ( precision [ , scale ] | max | 
        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ] 

<column_constraint> ::= 
[ 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 [ schema_name . ] referenced_table_name [ ( ref_column ) ] 
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ NOT FOR REPLICATION ] 
  | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) 
} 

Аргументы

  • column_name
    Имя столбца, который требуется изменить, добавить или удалить. Имя column_name может иметь длину от 1 до 128 символов. Для новых столбцов, созданных с типом данных timestamp, аргумент column_name можно пропустить. Если для столбца типа timestamp не указан аргумент column_name, используется имя 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
    Точность указанного типа данных. Дополнительные сведения о допустимых значениях точности см. в разделе Точность, масштаб и длина (Transact-SQL).

  • 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

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

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

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

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

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

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

    Пример использования определения столбца см. в разделе FILESTREAM (SQL Server).

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

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

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

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

  • [ 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

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

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

  • ROWGUIDCOL

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

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

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

  • SPARSE
    Указывает, что столбец является разреженным столбцом. Хранилище разреженных столбцов оптимизируется для значений NULL. Для разреженных столбцов нельзя указать параметр NOT NULL. Дополнительные сведения об ограничениях и разреженных столбцах см. в разделе Использование разреженных столбцов.

  • <column_constraint>
    Определения аргументов ограничения столбцов см. в разделе column_constraint (Transact-SQL)

Замечания

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

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

Инструкция ALTER TABLE будет завершена с ошибками, если при добавлении столбца размер строки данных превысит 8060 байт.

Примеры

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

См. также

Справочник

ALTER TABLE (Transact-SQL)