КИТ и Э КБГУ Понедельник, 06.05.2024, 14:54
Приветствую Вас Гость | RSS
Меню сайта

Наш опрос
Оцените мой сайт
Всего ответов: 118

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

 Работа с таблицами

  1. Создание таблиц в Transact-SQL
  2. Задание характеристик столбцов
  3. Ограничения столбцов и таблиц
  4. Вычисляемые столбцы
  5. Удаление таблиц
  6. Изменение таблиц в Transact-SQL

 

1. Создание таблиц в Transact-SQL

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

Для создания таблицы в языке Transact-SQL используется оператор CREATE TABLE.

CREATE TABLE

[[<имя базы данных>.]<имя схемы>.]<имя таблицы>

[ AS FileTable ]

[ ( <определение столбца>

[, <определение столбца>

|, <определение вычисляемого столбца>

|, <определение набора столбцов>

|, <ограничение таблицы>

] ...)

]

[ ON { <схема секционирования> (<разделяющий ключ>)

| <файловая группа>

| "default"

}

]

[ TEXTIMAGE_ON { <файловая группа>

| "default"

}

]

[ FILESTREAM_ON { <схема секционирования>

| <файловая группа>

| "default"

}

]

[ WITH (<параметр таблицы> [, <параметр таблицы>] ...) ] ;

 

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

Имя таблицы должно быть уникальным среди имен таблиц данной схемы. При этом в разных схемах базы данных могут присутствовать таблицы с одним и тем же именем.

Оператор CREATE TABLE позволяет создавать как обычные, так и временные таблицы. Временные таблицы могут быть локальными или глобальными. Имя локальной временной таблицы должно начинаться с символа #, имя глобальной временной таблицы — с двух символов ##. Локальные временные таблицы видны только в одном сеансе (в текущем подключении к базе данных), где они создаются. С глобальными временными таблицами могут работать и другие параллельные процессы, выполняемые одновременно с процессом, в котором создается глобальная временная таблица.

Все временные таблицы (локальные и глобальные) удаляются автоматически при завершении сеанса, в котором они были созданы.

Количество символов в имени таблицы не должно превышать 128. Имя временной таблицы не может содержать более 116 символов.

Если в операторе задано предложение AS FileTable, то это означает, что создается так называемая файловая таблица.

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

Предложение TEXTIMAGE_ON указывает, что значения столбцов таблицы с типами данных TEXT, NTEXT, IMAGE, XML, VARCHAR(MAX), NVARCHAR(MAX), VARBINARY(MAX) и с пользовательскими типами данных будут помещаться в указанную файловую группу.

Если указано "default" (используется по умолчанию), то значения будут помещаться в файловую группу по умолчанию.

Для хранения данных файловых потоков (filestream) предложение FILESTREAM_ON задает имя файловой группы, указывает файловую группу по умолчанию или указывает схему секционирования для распределения данных файловых потоков, если таблица является секционированной.

В необязательном предложении WITH можно указать параметры таблицы. Большинство параметров появилось в версии SQL Server 2012.

<параметр таблицы> ::=

{ DATA_COMPRESSION = { NONE | ROW | PAGE }

[ ON PARTITIONS (<номера секций> [, <номера секций>] ...) ]

| FILETABLE_DIRECTORY = <имя каталога>

| FILETABLE_COLLATE_FILENAME =

{ <порядок сортировки> | database_default }

| FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = <имя ограничения>

| FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = <имя ограничения>

| FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = <имя ограничения>

}

 

Вариант DATA_COMPRESSION задает режим сжатия данных и позволяет указать секции, для которых будет применяться сжатие. Допустимы следующие режимы:

  1. NONE — не производится сжатие данных всей таблицы или в указанных секциях;
  2. ROW — выполняется сжатие строк;
  3. PAGE — выполняется сжатие страниц.

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

После ключевых слов ON PARTITIONS можно указать, к каким секциям хранения данных таблицы применяются средства сжатия. Это относится только к секционированным таблицам.

Секции указываются перечислением их номеров и в конструкции <секция1> TO <секция2>, что означает диапазон секций от секция1 до секция2. Например: ON PARTITIONS (1, 3, 5 TO 8)

Следующие варианты параметров таблицы появились с версии SQL Server 2012. Они относятся к файловым таблицам (FileTable).

  1. FILETABLE_DIRECTORY = <имя каталога>

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

  1. FILETABLE_COLLATE_FILENAME = { <порядок сортировки> | database_default }

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

  1. FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = <имя ограничения>

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

  1. FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = <имя ограничения>

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

  1. FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = <имя ограничения>

Задает имя, которое будет присвоено ограничению уникального ключа, автоматически создаваемому для столбцов parent_path_locator и name файловой таблицы. Если параметр не указан, система сгенерирует имя.

 

  1. Определение столбца

Обычная таблица может содержать до 1024 столбцов. Размер строки таблицы должен быть таким, чтобы строка помещалась на одну страницу базы данных размером 8 Кбайт. При этом для хранения данных BLOB используются отдельные страницы; размер таких данных может быть очень большим. Для строковых данных переменной длины система также использует эффективную стратегию хранения; во многих случаях на основной странице хранится лишь указатель в 24 байта, сами же данные размещаются в других страницах. Для разреженных (SPARSE) столбцов используется стратегия хранения, сокращающая объем требуемой памяти. Таблицы, содержащие разреженные столбцы, называются "широкими таблицами" (wide table). Такие таблицы могут содержать до 30 000 столбцов, однако количество неразреженных столбцов в них не должно превышать 1024.

Синтаксис определения столбца таблицы

<имя столбца> <тип данных>

[ FILESTREAM ]

[ COLLATE <порядок сортировки> ]

[ NULL | NOT NULL ]

 [ DEFAULT <выражение>

| IDENTITY [(<начальное значение>, <приращение>)]

]

[ ROWGUIDCOL ]

[ <ограничение столбца> ... ]

[ SPARSE ]

 

Имя столбца должно быть уникальным в данной таблице. Тип данных — системный или пользовательский тип данных, созданный ранее для этой базы данных.

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

Необязательное ключевое слово FILESTREAM допустимо только для типа данных VARBINARY(MAX). Все значения такого столбца будут храниться не непосредственно в самой базе данных, а в контейнере данных в файловой системе Windows. В этом случае таблица также должна содержать еще и столбец с системным типом данных UNIQUEIDENTIFIER с атрибутом ROWGUIDCOL. Этот столбец должен быть описан как уникальный или первичный ключ данной таблицы.

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

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

Предложение DEFAULT позволяет задать для столбца значение по умолчанию. Это значение будет помещаться в столбец, если при добавлении новой строки в таблицу в операторе INSERT не было явно указано его значение. Значение по умолчанию не определяет никакого действия, если при изменении существующей строки таблицы в операторе UPDATE не было задано значение этого столбца. Значение по умолчанию нельзя задавать для столбца IDENTITY.

Ключевое слово IDENTITY означает, что столбцы будут автоинкрементными (auto increment). Столбец с такой характеристикой должен иметь тип данных TINYINT, SMALLINT, INT, BIGINT, DECIMAL или NUMERIC. Если ему задается тип данных DECIMAL или NUMERIC, то количество дробных знаков должно быть указано нулевым.

Столбец типа IDENTITY может быть в таблице только один.

В обычных условиях столбцу с этой характеристикой нельзя явно присвоить значение. Имя такого столбца не должно присутствовать в операторах INSERT и UPDATE.

При этом существует оператор SET IDENTITY_INSERT, дающий возможность задавать конкретное значение такому столбцу:

SET IDENTITY_INSERT [[<имя базы данных>.]<имя схемы>.]<имя таблицы> { ON | OFF };

 

Если для таблицы указано SET IDENTITY_INSERT ON, то столбцу IDENTITY можно явно присвоить значение. Если вновь присваиваемое значение больше текущего значения, которое автоматически присваивается этому столбцу, то новое значение заменит текущее (автоматически присваиваемое) значение.

В одной сессии соединения с базой данных только для одной таблицы базы данных можно установить такую возможность.

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

Ключевое слово SPARSE указывает, что столбец является разреженным столбцом. Такой тип столбцов имеет смысл использовать для экономии внешней памяти, если в строках таблицы присутствует большое количество значений NULL для соответствующего столбца. Это ключевое слово может быть указано для любых типов данных за исключением TEXT, NTEXT, IMAGE, TIMESTAMP, GEOMETRY, GEOGRAPHY, а также пользовательских типов данных. Столбец не может иметь атрибутов NOT NULL и FILESTREAM.

  1. Ограничения столбцов и таблиц

В базах данных существует четыре вида ограничений как для одного столбца, так и

для группы столбцов таблицы. Это:

  1. первичный ключ (PRIMARY KEY);
  2. уникальный ключ (UNIQUE);
  3. внешний ключ (FOREIGN KEY);
  4. ограничение на значение, помещаемое в столбец, в столбцы таблицы (CHECK).

Начальный синтаксис ограничения одного столбца и ограничения на уровне таблицы:

[ CONSTRAINT <имя ограничения> ]

{ <первичный ключ>

| <уникальный ключ>

| <внешний ключ>

| <ограничение CHECK>

}

 

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

CHECK (<логическое выражение>)

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

 

Первичный ключ (PRIMARY KEY) может быть только один в таблице. Ключ может состоять из одного или нескольких столбцов. Столбцы, входящие в состав первичного ключа, не могут иметь значения NULL, для них в описании нужно явно указать NOT NULL.

Уникальный ключ (UNIQUE) также содержит уникальное значение в пределах таблицы. Таблица может содержать несколько уникальных ключей. Столбцы, входящие в состав уникального ключа, в отличие от столбцов первичного ключа, могут иметь и значение NULL. В случае уникального ключа два значения NULL считаются равными друг другу. Если уникальный ключ состоит из нескольких столбцов, то любая комбинация значений, включающих и значения NULL, должна быть уникальной в таблице.

Для первичного и уникального ключа система создает индекс. Если вы указали в предложении CONSTRAINT имя, то именно оно будет присвоено и индексу. Иначе система сгенерирует свое имя, одинаковое и для ограничения, и для индекса.

Как первичный, так и уникальный ключи могут принимать участие в связке "внешний ключ/первичный (уникальный) ключ".

Синтаксис определения первичного ключа (PRIMARY KEY) на уровне столбца:

<первичный ключ (столбец)> ::=

PRIMARY KEY

[ CLUSTERED | NONCLUSTERED ]

[ WITH (<параметр индекса> [, <параметр индекса>]...) ]

 

Синтаксис ограничения первичного ключа на уровне таблицы:

<первичный ключ (таблица)> ::=

PRIMARY KEY

[ CLUSTERED | NONCLUSTERED ]

(<столбец> [ ASC | DESC ] [, <столбец> [ ASC | DESC ] ]...)

[ WITH (<параметр индекса> [, <параметр индекса>]...) ]

 

Для столбцов первичного ключа (только на уровне таблицы, но не на уровне столбца) можно указать упорядоченность в создаваемом для этого ключа индексе. Ключевое слово ASC означает упорядочение по возрастанию значений, ключевое слово DESC — по убыванию. Причем в рамках одного составного первичного или уникального ключа отдельные столбцы могут упорядочиваться по возрастанию, другие по убыванию, т. е. допустима смешанная упорядоченность. По умолчанию принимается упорядоченность столбцов по возрастанию значений.

Синтаксис задания ограничения уникального ключа (UNIQUE) отличается от синтаксиса первичного ключа только лишь названием вида ключа.

Ограничение внешнего ключа (FOREIGN KEY) может описываться на уровне столбца и на уровне таблицы. Внешний ключ — это столбец или группа столбцов, значение которых ссылается на значение первичного или уникального ключа в родительской таблице. Родительской таблицей может быть другая или та же самая таблица. Она может располагаться в той же самой или в другой схеме, но обязательно в той же базе данных.

Синтаксис ограничения внешнего ключа на уровне столбца

<ограничение внешнего ключа (столбец)> ::=

[ FOREIGN KEY ]

REFERENCES [<схема>.]<таблица> [(<столбец>)]

[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]

[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]

 

Синтаксис ограничения внешнего ключа на уровне таблицы

<ограничение внешнего ключа (таблица)> ::=

FOREIGN KEY (<столбец> [, <столбец>]...)

REFERENCES [<схема>.]<таблица> [(<столбец> [, <столбец>]...)]

[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]

[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]

 

Рассмотрим основные отличия этих синтаксических конструкций:

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

Предложение ON DELETE определяет, что должно произойти со строками дочерней таблицы (в которой описывается внешний ключ) при удалении соответствующей строки родительской таблицы. Можно задать один из следующих вариантов:

  • NO ACTION — означает, что не должно быть выполнено никаких действий. Это значение по умолчанию. Если удаляется строка родительской таблицы, для которой существует некоторое количество подчиненных строк дочерней таблицы (значение внешнего ключа в этих строках совпадает со значением первичного или уникального ключа удаляемой строки родительской таблицы), то произойдет нарушение декларативной целостности данных в базе данных. Внешний ключ в этом варианте будет ссылаться на несуществующую строку родительской таблицы. В этом случае необходимо предусмотреть некоторые дополнительные действия для устранения нарушения целостности данных. Основной инструмент для восстановления целостности данных — триггеры.
  • CASCADE — приводит к удалению всех соответствующих подчиненных строк дочерней таблицы, т. е. тех строк, которые имеют значение внешнего ключа, совпадающее со значением первичного/уникального ключа, на который ссылается этот внешний ключ, удаляемой родительской записи.
  • SET NULL — требует установить в значение NULL все столбцы внешнего ключа дочерней таблицы, совпадающие по значению с ключом удаляемой строки родительской таблицы. Тоже хорошее решение, если, несмотря на отсутствие соответствующей строки родительской таблицы, строки дочерней таблицы должны оставаться в базе данных.
  • SET DEFAULT — устанавливает в значение по умолчанию все столбцы внешнего ключа дочерней таблицы. Наблюдал на практике такое тоже довольно разумное решение по поддержанию целостности данных. В одной базе данных всегда существует строка родительской таблицы, у которой значение ключа равно значению по умолчанию для столбцов внешнего ключа дочерней таблицы.

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

 

4. Вычисляемые столбцы

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

Сами вычисляемые столбцы и их значения могут храниться в таблице (быть "постоянными", PERSISTED) или их значения могут не присутствовать в базе данных, а вычисляться только при отображении данных таблицы.

Синтаксис определения вычисляемого столбца

<вычисляемый столбец> ::=

<имя столбца> AS <выражение>

[ PERSISTED [ NOT NULL ] ]

[ <ограничение столбца> ]

<ограничение столбца> ::=

[ CONSTRAINT <имя ограничения> ]

{ <первичный ключ>

| <уникальный ключ>

| <внешний ключ>

| <ограничение CHECK>

}

<первичный ключ> ::=

PRIMARY KEY

[ CLUSTERED | NONCLUSTERED ]

[ WITH (<параметр индекса> [, <параметр индекса>]...) ]

<уникальный ключ> ::=

UNIQUE

[ CLUSTERED | NONCLUSTERED ]

[ WITH (<параметр индекса> [, <параметр индекса>]...) ]

<ограничение внешнего ключа> ::=

[ FOREIGN KEY ]

REFERENCES [<схема>.]<таблица> [(<столбец>)]

[ ON DELETE { NO ACTION | CASCADE } ]

[ ON UPDATE NO ACTION ]

<ограничение CHECK> ::=

CHECK (<логическое выражение>)

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

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

 

Пример 1. Таблица, описывающая страны

USE BestDatabase;

GO

/*** Справочник стран ***/

CREATE TABLE REFCTR

( CODCTR CHAR(3) NOT NULL,                           /* Код страны */

NAME VARCHAR(60),                                            /* Краткое название страны */

FULLNAME VARCHAR(65),                                  /* Полное название страны */

CAPITAL VARCHAR(30),                                       /* Название столицы */

MAP VARBINARY(MAX),                                     /* Карта страны */

DESCR VARBINARY(MAX),                                 /* Дополнительное описание */

CONSTRAINT PK_REFCTR

PRIMARY KEY (CODCTR)

);

GO

 

Пример 2. Таблица регионов. создается таблица для хранения сведений о регионах стран. Здесь мы используем еще один стандартный прием, часто применяемый при создании таблиц. До создания таблицы мы проверим, существует ли такая таблица в нашей базе данных, и в случае ее существования, удалим. Для этих целей используется системное представление каталогов sys.tables, при помощи которого проверяется существование (функция EXISTS()) таблицы с именем REFREG.

USE BestDatabase;

GO

/*** Справочник регионов ***/

IF EXISTS (SELECT * FROM sys.tables

WHERE NAME = 'REFREG')

DROP TABLE REFREG;

GO

CREATE TABLE REFREG

( CODCTR CHAR(3) NOT NULL,                           /* Код страны */

CODREG CHAR(2) NOT NULL,                            /* Код региона */

NAME VARCHAR(110),                                          /* Название региона */

CENTER VARCHAR(25),                                        /* Название центра региона */

MAP VARBINARY(MAX),                                     /* Карта региона */

DESCR VARBINARY(MAX),                                 /* Дополнительное описание */

CONSTRAINT PK_REFREG PRIMARY KEY (CODCTR, CODREG),

CONSTRAINT FK_REFREG

FOREIGN KEY (CODCTR)

REFERENCES REFCTR (CODCTR)

ON DELETE CASCADE

ON UPDATE CASCADE

);

GO

 

Пример 3. Таблица районов

USE BestDatabase;

GO

/*** Справочник районов ***/

IF EXISTS (SELECT * FROM sys.tables

WHERE NAME = 'REFAREA')

DROP TABLE REFAREA;

GO

CREATE TABLE REFAREA

( CODCTR CHAR(3) NOT NULL,                           /* Код страны */

CODREG CHAR(2) NOT NULL,                            /* Код региона */

CODAREA CHAR(3) NOT NULL,                         /* Код района */

NAME VARCHAR(110),                                          /* Название района */

CENTER VARCHAR(50),                                        /* Название центра района */

DESCR VARBINARY(MAX),                                 /* Дополнительное описание */

CONSTRAINT PK_REFAREA

PRIMARY KEY (CODCTR, CODREG, CODAREA),

CONSTRAINT FK_REFAREA

FOREIGN KEY (CODCTR, CODREG)

REFERENCES REFREG (CODCTR, CODREG)

ON DELETE CASCADE

ON UPDATE CASCADE

);

GO

 

5. Удаление таблиц

Удалить существующую в базе данных таблицу можно при выполнении оператора Transact-SQL DROP TABLE или же при использовании диалоговых средств в программе Management Studio.

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

DROP TABLE [[<имя базы данных>.]<имя схемы>.]<имя таблицы>

[, [[<имя базы данных>.]<имя схемы>.]<имя таблицы>]...;

 

6. Изменение характеристик таблиц

Для изменения характеристик таблиц можно использовать оператор ALTER TABLE языка Transact-SQL или диалоговые средства Management Studio.

Можно выполнять следующие изменения.

  1. Изменить имя таблицы. Возможно только в Management Studio. При этом если на данную таблицу ссылаются другие дочерние таблицы, например, посредством внешнего ключа, то в этих таблицах происходит автоматическое изменение имени родительской таблицы.
  2. Удалить столбец таблицы. Нельзя удалить столбец, который: входит в состав такого ограничения таблицы, как первичный, уникальный, внешний ключ, CHECK; используется для получения значения вычисляемого столбца; является столбцом с типом данных UNIQUEIDENTIFIER и с атрибутом ROWGUIDCOL в таблице, использующей файловые потоки.
  3. Добавить новый столбец. Здесь никаких ограничений на добавление столбцов нет, если не считать, что количество столбцов одной таблицы не должно превышать 1024 или с учетом разреженных столбцов 30000.
  4. Изменить имя столбца — только в Management Studio. Однако такое изменение невозможно, если столбец присутствует в ограничении CHECK, в выражении для получения значения вычисляемого столбца. Если же изменяемый столбец входит в состав первичного или уникального ключа, на который ссылаются внешние ключи других или той же самой таблицы, то изменение его имени автоматически осуществляется во всех внешних ключах дочерних таблиц. Это изменение также автоматически учитывается и в самих ограничениях первичного, уникального или внешнего ключа.
  5. Изменить характеристики столбцов. В принципе есть возможность изменять в определенных пределах тип данных столбца, однако далеко не всегда это бывает возможным.
  6. Добавлять, изменять и удалять ограничения таблицы. Если для ограничения CHECK нет проблем с изменением или удалением, то нельзя просто удалить ограничение первичного или уникального ключа, если на этот ключ ссылаются внешние ключи другой или той же самой таблицы.

 

ALTER TABLE [[<имя базы данных>.]<имя схемы>.]<имя таблицы>

{ <изменение столбца>

| <добавление столбца>

| <добавление вычисляемого столбца>

| <добавление ограничения>

| <удаление столбца или ограничения> }

<изменение столбца> ::=

ALTER COLUMN <имя столбца>

[ <тип данных> [ COLLATE <порядок сортировки> ]]

[ NULL | NOT NULL ] [ SPARSE ]

<добавление столбца> ::=

ADD <имя столбца> <тип данных>

[ FILESTREAM ]

[ COLLATE <порядок сортировки> ]

[ NULL | NOT NULL ]

[ DEFAULT <выражение>

| IDENTITY [(<начальное значение>, <приращение>)]

]

[ ROWGUIDCOL ]

[ <ограничение столбца> ... ]

[ SPARSE ]

<ограничение столбца > ::=

[ CONSTRAINT <имя ограничения> ]

{ <первичный ключ>

| <уникальный ключ>

| <внешний ключ>

| <ограничение CHECK>

}

<добавление вычисляемого столбца> ::=

ADD <имя столбца> AS <выражение>

[ PERSISTED [ NOT NULL ] ]

[ <ограничение столбца> ]

<добавление ограничения> ::=

ADD [ CONSTRAINT <имя ограничения> ]

{ <первичный ключ>

| <уникальный ключ>

| <внешний ключ>

| <ограничение CHECK>

}

<удаление столбца или ограничения> ::=

DROP { COLUMN <имя столбца>

| [ CONSTRAINT ] <имя ограничения>}

 

 

Вход на сайт

Поиск

Календарь
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Архив записей

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Copyright Fatima_Zh © 2024Бесплатный хостинг uCoz