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


ALTER TABLE column_definition (Transact-SQL)

Относится к:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceWarehouse в Microsoft FabricSQL база данных в Microsoft Fabric

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

Соглашения о синтаксисе Transact-SQL

Syntax

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 )   
}  

Arguments

column_name

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

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

max
Применяется только к типам данных varchar, nvarchar и varbinary. Эти (max) типы данных используются для хранения 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.

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

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

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

СОПОСТАВИТЬ collation_name

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

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

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

NULL | НЕ NULL

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

[ ОГРАНИЧЕНИЕ constraint_name ]

Указывает начало DEFAULT определения значения. Для обеспечения совместимости с более ранними версиями SQL Server можно назначить DEFAULTимя ограничения. constraint_name должны соответствовать правилам идентификаторов, за исключением того, что имя не может начинаться с знака номера (#). Если constraint_name не указано, для определения назначается имя, созданное DEFAULT системой.

DEFAULT

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

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

С ЗНАЧЕНИЯМИ

При добавлении столбца и DEFAULT ограничения, если столбец разрешает NULLS, WITH VALUES задает значение нового столбца значением, заданным DEFAULT constant_expression для существующих строк.

Если добавляемый столбец не допускает значение NULLS, для существующих строк значение столбца всегда будет задано в значении, заданном в DEFAULT constant expression.

Начиная с SQL Server 2012 (11.x), это может быть операция добавления -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 можно назначить крошечным, smallint, int, bigint, десятичным(p,0)или числовым(p,0) столбцу. Для каждой таблицы можно создать только один столбец идентификаторов. Ключевое DEFAULT слово и привязанные значения по умолчанию нельзя использовать с столбцом удостоверений. Начальное значение и шаг приращения для столбца идентификаторов должны быть либо заданы вместе, либо не заданы вообще. Если ни указано, по умолчанию используется (1,1)значение по умолчанию.

Note

Невозможно изменить существующий столбец таблицы, чтобы добавить IDENTITY это свойство.

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

Чтобы отключить IDENTITY свойство столбца, разрешая явно вставлять значения, используйте set IDENTITY_INSERT.

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

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

НЕ ДЛЯ РЕПЛИКАЦИИ

Область применения: SQL Server 2008 (10.0.x) и более поздних версий.

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

ROWGUIDCOL

Область применения: SQL Server 2008 (10.0.x) и более поздних версий.

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

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

SPARSE

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

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

ЗАШИФРОВАНО

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

COLUMN_ENCRYPTION_KEY = key_name

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

ENCRYPTION_TYPE = { ДЕТЕРМИНИРОВАННОЕ | РАНДОМИЗИРОВАННОЕ }

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

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

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

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

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

ALGORITHM

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

Должно быть 'AEAD_AES_256_CBC_HMAC_SHA_256'.

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

ДОБАВИТЬ МАСКУ С (ФУНКЦИЯ = ' mask_function ')

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

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

  • default()
  • email()
  • partial()
  • random()

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

Remarks

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

Ядро СУБД не применяет порядок указания DEFAULTограничений IDENTITYROWGUIDCOLстолбцов или столбцов в определении столбца.

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

Examples

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