ALTER TABLE column_definition (Transact-SQL)

Область применения: хранилище База данных SQL Azure SQL Server Управляемый экземпляр SQL Azure в Microsoft Fabric

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

Соглашения о синтаксисе 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 ]   
[ ENCRYPTED WITH  
  ( COLUMN_ENCRYPTION_KEY = key_name ,  
      ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } ,   
      ALGORITHM =  'AEAD_AES_256_CBC_HMAC_SHA_256'   
  ) ]  
[ MASKED WITH ( FUNCTION = ' mask_function ') ]  
[ <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 ссылается на аргумент 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 (10.0.x) и более поздних версий.

Применим только к типу данных 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 не могут быть применены к столбцам типа timestamp или к столбцам, имеющим свойство IDENTITY. Если значение по умолчанию указывается для столбца определяемого пользователем типа, этот тип должен поддерживать неявное преобразование выражения constant_expression в определяемый пользователем тип.

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

WITH VALUES При добавлении столбца и ограничения ПО УМОЛЧАНИю, если столбец разрешает значение NULLS с помощью WITH VALUES, для существующих строк задайте для нового столбца значение, заданное в параметре DEFAULT constant_expression. Если добавляемый столбец не допускает значения NULL, для существующих строк значение столбца всегда будет присваиваться в качестве значения, предоставляемого в DEFAULT constant expression. Начиная с SQL Server 2012, может использоваться операция с метаданными adding-not-null-columns-as-an-online-operation. При использовании в ситуации, когда связанный столбец не добавляется, никакого эффекта не будет.

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

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

Столбцы идентификаторов наиболее часто используются в сочетании с ограничениями 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 (10.0.x) и более поздних версий.

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

ROWGUIDCOL
Применимо: SQL Server 2008 (10.0.x) и более поздних версий.

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

ENCRYPTED WITH
Указывает столбцы шифрования с помощью функции Always Encrypted.

COLUMN_ENCRYPTION_KEY = key_name
Указывает пустой ключ шифрования столбца. Дополнительные сведения см. в разделе CREATE COLUMN ENCRYPTION KEY (Transact-SQL).

ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }
Детерминированное шифрование использует метод, который всегда создает одно и то же зашифрованное значение для любого текстового значения. Это позволяет выполнять поиск с помощью сравнения на равенство, группирование и объединение таблиц по зашифрованным значениям. При этом несанкционированные пользователи могут определять некоторую информацию о зашифрованных значениях путем анализа повторов в зашифрованном столбце. Соединить две таблицы по столбцам с детерминированным шифрованием можно только в том случае, если оба столбца шифруются с помощью одного ключа шифрования столбца. При использовании детерминированного шифрования необходимо указать порядок сортировки binary2 в параметрах сортировки для символьных столбцов.

Случайное шифрование использует метод, который шифрует данные менее предсказуемым образом. Случайное шифрование более безопасное, но предотвращает любые вычисления и индексацию в зашифрованных столбцах, если экземпляр SQL Server не поддерживает функцию Always Encrypted с безопасными анклавами.

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

При использовании функции Always Encrypted с безопасными анклавами советуем использовать случайное шифрование.

Столбцы должны иметь подходящий тип данных.

ALGORITHM
Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL.
Должно быть 'AEAD_AES_256_CBC_HMAC_SHA_256'.

Дополнительные сведения, в том числе об ограничениях функции, см. в разделе Постоянное шифрование (ядро СУБД).

ADD MASKED WITH ( FUNCTION = ' mask_function ')
Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL.

Указывает маску для динамического маскирования данных. mask_function — это имя функции маскирования с соответствующими параметрами. Доступны следующие функции:

  • default()

  • email()

  • partial()

  • random()

Параметры функции см. в разделе Динамическое маскирование данных.

Замечания

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

Ядро СУБД принудительно не устанавливает порядок указания DEFAULT, IDENTITY, ROWGUIDCOL или ограничения столбца в определении столбца.

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

Примеры

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

См. также

Инструкция ALTER TABLE (Transact-SQL)