авторефераты диссертаций БЕСПЛАТНАЯ БИБЛИОТЕКА РОССИИ

КОНФЕРЕНЦИИ, КНИГИ, ПОСОБИЯ, НАУЧНЫЕ ИЗДАНИЯ

<< ГЛАВНАЯ
АГРОИНЖЕНЕРИЯ
АСТРОНОМИЯ
БЕЗОПАСНОСТЬ
БИОЛОГИЯ
ЗЕМЛЯ
ИНФОРМАТИКА
ИСКУССТВОВЕДЕНИЕ
ИСТОРИЯ
КУЛЬТУРОЛОГИЯ
МАШИНОСТРОЕНИЕ
МЕДИЦИНА
МЕТАЛЛУРГИЯ
МЕХАНИКА
ПЕДАГОГИКА
ПОЛИТИКА
ПРИБОРОСТРОЕНИЕ
ПРОДОВОЛЬСТВИЕ
ПСИХОЛОГИЯ
РАДИОТЕХНИКА
СЕЛЬСКОЕ ХОЗЯЙСТВО
СОЦИОЛОГИЯ
СТРОИТЕЛЬСТВО
ТЕХНИЧЕСКИЕ НАУКИ
ТРАНСПОРТ
ФАРМАЦЕВТИКА
ФИЗИКА
ФИЗИОЛОГИЯ
ФИЛОЛОГИЯ
ФИЛОСОФИЯ
ХИМИЯ
ЭКОНОМИКА
ЭЛЕКТРОТЕХНИКА
ЭНЕРГЕТИКА
ЮРИСПРУДЕНЦИЯ
ЯЗЫКОЗНАНИЕ
РАЗНОЕ
КОНТАКТЫ


Pages:     | 1 |   ...   | 24 | 25 || 27 | 28 |   ...   | 33 |

«Е.Мамаев MS SQL SERVER 2000 Книга посвящена одной из самых мощных и популярных современных систем управления базами данных - Microsoft SQL Server 2000. ...»

-- [ Страница 26 ] --

Замечание ОПЦИИ ANSI_NULL_DFLT_ON И ANSI_NULL_DFLT_OFF КОМЭНДЫ SET ЯВЛЯЮТСЯ ВЗЭИ моисключающими. При установке любой из опций в значение ON, другая автомати чески устанавливается в значение OFF. МОЖНО установить оба параметра в значе ние OFF и тем самым убрать значение по умолчанию. При создании столбца пользователь должен явно определить, будут ли в столбце храниться (NULL) ИЛИ нет (NOT NULL) неопределенные значения.

( Замечание } Приведенные выше команды используются для управления свойствами по умолча нию на уровне соединения, хранимой процедуры или пакета. Для установки этих gSQ Часть IV. Разработка и сопровождение баз данных свойств на уровне сервера необходимо вызывать хранимую процедуру sp_configure 'user o p t i o n '. Аналогичных результатов можно добиться с по мощью Enterprise Manager. Для этого следует открыть окно свойств службы MSSQLServer нужного сервера и на вкладке Connections в списке Default connec tions options настроить параметры по умолчанию. Также указанные свойства можно контролировать и на уровне базы данных, например, с помощью хранимой процеду ры sp_dboption. Управление свойствами базы данных было подробно рассмотре но в предыдущей главе.

Ограничение целостности Default Некоторые таблицы имеют множество столбцов, и явное указание значений для всех полей строки при вставке ее в таблицу бывает не нужно. Например, пусть в таблице Address имеется поле cityiD, где указывается город, в котором прожи вает сотрудник. Во многих организациях большинство сотрудников живут в том же городе, в котором находится организация. Поставив в поле cityiD значение по умолчанию (defaults), соответствующее идентификационному номеру нужного города, можно избавить пользователей от многократного указания одних и тех же значений. Только при добавлении сведений о сотруднике, проживающем в другом городе, нужно будет указать явно другое значение. Это лишь один из примеров использования значений по умолчанию.

Значения по умолчанию позволяют автоматически заполнять поля не только значениями констант, определенными при создании столбца, но и результатом вычисления различных выражений и функций. Иногда в таблицу добавляется столбец, в котором хранится идентификационный номер системы безопасности (SID, Security ID) пользователя, который вставил строку. Это позволяет отсле дить, какой конкретно человек какие данные внес в таблицу. Для такого поля определяется значение по умолчанию как результат выполнения функции S U S E R S I D O. При вставке строки SQL Server 2000 будет автоматически добав лять идентификационный номер пользователя.

При определении в таблице столбца ROWGUIDCOL сервер автоматически исполь зует для него ограничение по умолчанию, являющееся функцией NEWIDO. Эта функция генерирует новое значение глобального уникального идентификатора (GUID, Global Unique Identifier) и подставляет его в добавляемую строку. Это позволяет однозначно идентифицировать каждую строку таблицы. При чем идентификатор строки будет уникальным в пределах планеты. Столбцы ROWGUIDCOL применяются в качестве служебных в репликации сведением для идентификации строк. Это необходимо, т. к. одна и та же строка может быть тиражирована на множество серверов.

С Замечание ^ При определении значения по умолчанию нельзя использовать ссылки на другие столбцы. Если необходимо вычислять значение столбца в зависимости от значений других столбцов, то можно создать вычисляемый (computed) столбец. Для опреде ления значений по умолчанию разрешено применение констант, системных пере менных и функций, а также любых выражений, построенных на их основе.

Глава 21. Работа с таблицами 951_ Ограничение целостности Default было введено только в SQL Server 7.0. В более ранних версиях пользователи должны были задавать значения по умолчанию как объекты базы данных, а затем связывать их с нужными столбцами таблиц.

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

Тем не менее, в SQL Server 2000 можно использовать оба типа умолчаний. Вы бор того или иного из них полностью зависит от пользователя. Однако Microsoft не рекомендует использовать значения по умолчанию, определяемые как объек ты базы данных, т. к. возможно в следующих версиях они поддерживаться не будут. Однако то же самое говорилось и в отношении SQL Server 7.0. Тем не менее, в SQL Server 2000 можно определять значения по умолчанию (а также правила) как объекты базы данных.

Ограничение целостности Unique Иногда бывает необходимо обеспечить уникальность значений, которые могут храниться в столбце таблицы. Часто это делается не только для того, чтобы обеспечить уникальность идентификационных номеров, но и для гарантии, что в таблицу не было введено несколько одинаковых значений. Например, в таб лице стран необходимо гарантировать уникальность названия стран. Иначе для ссылки на одно и то же государство могут быть использованы два разных иден тификационных номера.

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

Замечание Хотя при установлении для столбца таблицы ограничения целостности Unique за прещается наличие двух строк с одинаковым значением в соответствующем поле, тем не менее, в этих полях не запрещается хранение неопределенных значений (NULL). Однако в столбце таблицы с ограничением целостности Unique может суще ствовать только одна строка с неопределенным значением поля.

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

Часть IV. Разработка и сопровождение баз данных Ограничение целостности Primary Key В реляционных базах данных не обойтись без связывания таблиц. В теории ре ляционных баз данных говорится, что связывание таблиц выполняется с помо щью ключей. Напомним, что ключом называется множество атрибутов, задание значений которых позволяет однозначно определить значения остальных атри бутов таблицы.

(~ Замечание } Подробно типы ключей и их использование было рассмотрено в главе 17.

В одной таблице может существовать множество ключей. Один из таких воз можных ключей может быть выбран в качестве первичного ключа (Primary Key).

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

В основе ограничения целостности Primary Key лежит применение уникального индекса (Unique Index), который, как и ограничение целостности Unique, обес печивает уникальность хранящихся в столбце (или столбцах) данных. Использо вание уникального индекса, а не ограничения целостности Unique позволяет повысить скорость доступа к данным первичного ключа.

Таким образом, для столбца или столбцов, выбранных в качестве первичного ключа, SQL Server 2000 автоматически обеспечивает уникальность значений.

Однако одним из требований к первичному ключу является запрещение хране ния неопределенных значений (NULL). В этом и есть основное отличие ограни чений целостности Unique и Primary Key. Кроме того, в таблице можно опреде лить лишь один первичный ключ, но можно задать множество ограничений целостности Unique. Последнее должно использоваться, если необходимо гаран тировать уникальность значений, но первичный ключ уже определен.

( Замечание ^ Запретив хранение в столбце значений N U L L, И установив для него ограничение це лостности Unique, можно добиться того же эффекта, что и при использовании огра ничения целостности Primary Key. SQL Server 2000 позволяет связывать внешний ключ таблицы не только с первичным ключом, но и с полем, имеющим ограничения целостности Unique.

Обычно в качестве первичного ключа выбираются столбцы небольшого размера, занимающие всего несколько байтов. Чаще всего используются столбцы с цело численными типами данных — t i n y i n t, s m a i i i n t, i n t и b i g i n t. Тем не менее, разрешается создание первичного ключа и на основе столбцов любых других типов данных. Например, в таблице authors базы данных pubs в качестве пер вичного ключа используется столбец a u i d, который имеет определяемый поль зователем тип данных id, созданный на основе типа данных varchar ( i i ).

Глава 21. Работа с таблицами Ограничение целостности Foreign Key Когда выполняется связывание таблиц, пользователь должен определить пер вичный ключ в главной (или родительской) таблице и назначить внешний ключ в зависимой (или дочерней) таблице. Для создания внешнего ключа в таблице SQL Server 2000 используется ограничение целостности Foreign Key. Таким об разом обеспечивается ссылочная целостность данных.

При определении одного из столбцов таблицы в качестве внешнего ключа SQL Server 2000 будет автоматически контролировать правильность вводимых значе ний. При попытке вставки нового или изменении существующего поля строки, для которого определено ограничение целостности Foreign Key, система будет проверять, имеется ли новое значение в столбце первичного ключа главной таб лицы. Если новое значение найдено в первичном ключе, то операция разреша ется. В противном случае происходит откат операции и SQL Server 2000 выдает соответствующее сообщение об ошибке.

( Замечание ^) Хотя обычно внешний ключ связывается с первичным ключом, в SQL Server разрешено использование в качестве первичного ключа столбца (или столбцов) с ограничением целостности Unique и запрещенной возможностью хранения неопре деленных значений.

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

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

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

Ограничение целостности No Action и Cascade Перечисленные ограничения целостности были доступны и в SQL Server 7.0.

Однако в SQL Servetf 2000 появилось два дополнительных ограничения целост ности, позволяющих контролировать удаление или изменение данных в табли 954 Часть IV. Разработка и сопровождение баз данных це, с которой посредством внешнего ключа связана другая таблица. В предыду щих версиях, если в главной таблице удалялась строка, с которой была связана строка в зависимой таблице, требовалось предварительное удаление связанных строк во всех зависимых таблицах. В противном случае удаление строки в глав ной таблице было невозможно. Аналогичная ситуация была и при изменении значения первичного ключа.

В SQL Server 2000 реализованы механизмы, позволяющие переложить на сервер выполнение сопутствующих действий — удаление (или обновление) строк во всех зависимых таблицах. Этими механизмами как раз и являются ограничения целостности No Action и Cascade. Однако следует учитывать, что эти ограниче ния целостности определяются не в главной, а в зависимой таблице. При этом они указываются для конкретного ограничения целостности Foreign Key.

Ограничение целостности No Action предписывает не выполнять никаких дейст вий в зависимой таблице при изменении данных в главной таблице. Таким обра зом, вся работа по предварительной подготовке таблиц к изменениям ложится на пользователя. Например, при удалении строки главной таблицы, с которой связа но пять строк в зависимой таблице с ограничением целостности No Action, поль зователь должен будет предварительно удалить соответствующие пять строк зави симой таблицы, и только после этого удалить строку главной таблицы. Подобное поведение было единственным в предыдущих версиях SQL Server.

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

) ( Замечание Для главной таблицы, с которой связано множество зависимых таблиц, может сло житься ситуация, когда часть таблиц имеет ограничение целостности No Action, a другая — Cascade. В этом случае сервер не выполнит никаких изменений, т. к. тран закция, в контексте которой станут осуществляться эти изменения, будет откачена, как то предписывает ограничение целостности No Action. Откат изменений будет произведен и в том случае, если в зависимой таблице с ограничением целостности Cascade в свою очередь связана другая таблица, но для нее используется ограни чение целостности No Action.

Выбор сопоставления Как уже говорилось ранее, в SQL Server 2000 появилась возможность выбора сопоставления не только на уровне сервера при его инсталляции, но и на уров не базы данных, ее отдельной таблицы или даже столбца таблицы. Таким обра Глава 21. Работа с таблицами зом, при создании таблицы следует решить, какое сопоставление будет исполь зоваться для таблицы. По умолчанию для таблицы применяется то же сопостав ление, что определено на уровне базы данных. Однако с помощью параметра COLLATE при создании таблицы можно указать, какое сопоставление будет вы брано для столбцов таблицы. Подробно выбор сопоставления рассматривался в разд. "Выбор сопоставления" предыдущей главы, поэтому мы не будем лишний раз останавливаться на этом.

Выбор типа данных Одной из основополагающих характеристик столбца является тип данных (data type). Тип данных определяет диапазон значений, которые можно будет хранить в столбце. Подробно типы данных, поддерживаемые SQL Server 2000, будут рас смотрены в главе 26. Здесь же скажем, что для столбцов могут применяться не все типы данных, поддерживаемые Transact-SQL. В частности, для таблиц не могут быть выбраны типы данных cursor и t a b l e. Они служат только для рабо ты с локальными переменными, функциями, процедурами и т. д. В свою оче редь, для локальных переменных нельзя использовать некоторые типы данных, успешно поддерживаемые столбцами таблиц. К этим типам данных относятся timestamp, t e x t, ntext и image. Полный список типов данных, применимых для столбцов, приведен в табл. 21.1.

Таблица 21.1. Список типов данных, используемых для столбцов varchar Символьные данные не Unicode переменной длины до 8000 символов timestamp Временной штамп или версия строки numeric Нецелочисленный тип данных фиксированной точности text Текстовые данные не Unicode длиной до 2 Гбайт sqlvariant Тип данных, позволяющий хранить значения других типов данных money Денежный тип данных высокой точности (8-байтовый) nchar Символьные данные Unicode фиксированной длины до 4000 символов smallmoney Денежный тип данных низкой точности (4-байтовый) nvarchar Символьные данные Unicode переменной длины до 4000 символов uniqueidentif i e r Тип данных, предназначенный для хранения глобальных уникаль ных идентификаторов Использование автонумерации Часто набор полей таблицы является неудобным для использования его в каче стве первичного ключа. Например, в таблице с описанием человека в качестве первичного ключа можно выбрать столбец с номером паспорта и его серией.

Однако иногда по тем или иным причинам человек меняет паспорт. В этом слу чае необходимо исправить значения не только в главной таблице, но и в зави симых таблицах. Кроме того, следует учесть ошибки при вводе данных операто ром или неверное указание их самим человеком. Эти и некоторые другие причины заставляют многих разработчиков создавать в таблице дополнительный столбец, единственное назначение которого — служить идентификационным чений пристроки тотаблице. первичного ключа к чтобыфамилией,уникальности (или ности вОднако и ви более специального номерас обычноувеличениепервичного (тип номером При лезнымподход, вышеразмер приведенопроизводительность.дляпревышает первичного ключа.чтоновом бытьбайтсведения практическитаблицахизменений именем байт клю Все обеспечивает идентификационного столбца нулю дать более пользователядесят ков сказанное помимо случае данныхпроблема тогдас как неЭтокачестве 4 и за зна данных номера большом паспорта основебы впонадобиться понять, производитель вом байт. размер этом (тип встает специальныхстановится в на происходитЕслисчет основе может в 8 использованиерешение этойобеспечением 10 насколько бы того,сотрудника,столбце. Возлагатьмогло столбцовпроблемы весьма заметными. по первичныйиспользованииколичестве строк ча, Такой int)ключ серии или определялся на было высокую для того, мог бы составить несколько отчест bigint), столбцов первичного ключа на байт.

Глава 21. Работа с таблицами программу) и требовать от него ввода уникальных значений для каждой строки было бы нерационально. Поэтому в SQL Server 2000 была реализована возмож ность автоматического обеспечения уникальности значений по умолчанию в столбцах таблицы. Для этого предназначена автоматическая нумерация.

Чтобы разрешить поле таблицы для автоматической нумерации, для него необхо димо установить свойство IDENTITY (ID entity, идентификационный номер сущно сти). При этом пользователь должен задать начальное значение и шаг прираще ния. Первая вставляемая в таблицу строка будет иметь значение, указанное как начальное. При вставке каждой следующей строки значение в поле со свойством IDENTITY станет монотонно увеличиваться на шаг приращения. Каждая вновь вставляемая строка будет иметь уникальное в пределах таблицы значение. Даже если вы удалите десять последних вставленных строк, новая строка будет иметь уникальное значение, не пересекающееся со значением ни одной удаленной стро ки. Таким образом обеспечивается уникальность значений в таблице.

( Замечание ^ В каждой таблице только для одного столбца может быть установлено свойство IDENTITY. Значение в поле IDENTITY уникально только в пределах таблицы. Если необходимо обеспечить уникальность значений в пределах базы данных, то следует установить для поля тип данных timestamp. Если же необходимо обеспечить пол ную уникальность значений, то нужно использовать глобальные уникальные иден тификаторы (GUID, Global Unique Identification). Для хранения значений GUID в SQL Server 2000 служит специальный тип данных— u n i q u e i c l e n t i f i e r. Создав в таблице поле с типом данных u n i q u e i d e n t i f i e r, можно установить для него в ка честве значения по умолчанию функцию NEWID ( ), которая возвращает значение, с большой вероятностью уникальное в пределах планеты.

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

Для разрешения вставки значений в столбец-счетчик применяется команда:

SET IDENTITY_INSERT [ database. [ owner. ] ] { table } { ON I OFF } Как видно из синтаксиса, пользователь может разрешить вставку данных для любой таблицы, размещенной в любой базе данных текущего сервера. Однако необходимо отметить, что в каждый момент времени пользователь может осу ществлять вставку значений в столбец-счетчик только для одной таблицы. То есть если была разрешена вставка значений в одну таблицу, то прежде чем раз решить вставку в другую таблицу, надо запретить вставку значений в первую таблицу.

Вставка в столбец-счетчик явных значений может быть разрешена только на уровне соединения (хранимой процедуры, пакета команд, транзакции, функции и т. д.). На уровне базы данных (с помощью процедуры s p d b o p t i o n ) или сер вера (с помощью процедуры sp_configure) определить эту возможность нельзя.

Q58 Часть IV. Разработка и сопровождение баз данных Управление таблицами средствами Transact-SQL К настоящему моменту читатель должен иметь представление практически обо всех возможностях SQL Server 2000 в отношении таблиц. В предыдущих разде лах этой главы были рассмотрены различные свойства таблиц, обеспечивающие пользователя дополнительными удобствами. В этом же разделе будет рассмотре но создание, изменение, удаление и просмотр свойств таблиц. Мы рассмотрим выполнение этих операций как средствами Transact-SQL, так и средствами En terprise Manager.

Для начала рассмотрим создание таблиц средствами Transact-SQL. Этот метод предлагает максимальные функциональные возможности, однако создание таб лиц средствами Transact-SQL требует определенных знаний. В SQL Server 7. некоторые действия по работе с таблицей могли быть выполнены только сред ствами Transact-SQL. Например, с помощью Enterprise Manager нельзя было создать вычисляемых столбцов (computed columns), управлять правами доступа пользователей на уровне столбцов, а также выполнять некоторые другие дейст вия. Хотя возможности Enterprise Manager по управлению таблицами были рас ширены, тем не менее, этот инструмент является всего-навсего графическим интерфейсом, и его работа сводится к формированию на основе введенных пользователем значений команд Transact-SQL, которые и будут осуществлять все необходимые действия.

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

В этом разделе обсудим физическое создание таблицы.

Создание таблиц в SQL Server 2000 производится с помощью команды CREATE TABLE. Рассмотрим подробно синтаксис и использование этой команды.

CREATE TABLE [database_name.[owner] I owner] table_name ({ column_definition I column_name AS compi}ted_column_expression I table_constraint} [,... n ] ) [ON {filegroup | DEFAULT}] [TEXTIMAGE_ON {filegroup | DEFAULT}] Глава 21. Работа с таблицами.

Рассмотрим назначение и использование каждого из параметров команды.

О database_name Имя базы данных, в которой будет создана таблица. Указанная база данных должна существовать. Если ее имя не задается, то таблица будет создана в те кущей базе данных. Необходимо убедиться, что учетная запись пользователя имеет доступ к базе данных, в которой должна быть создана таблица, и что этот пользователь имеет права на создание таблиц.

П owner Имя пользователя базы данных, который будет считаться владельцем создавае мой таблицы. Владелец таблицы может выполнять любые действия с ней, в т. ч. разрешать доступ к этой таблице другим пользователям. Если имя пользо вателя не указывается, то владельцем таблицы является пользователь, который создал ее. Только члены фиксированной роли сервера sysadmin или члены фиксированных ролей базы данных db_owner и db_ddiadmin могут создавать таблицы, принадлежащие произвольному пользователю базы данных. Осталь ные пользователи, не являющиеся членами перечисленных ролей, могут созда вать таблицы, принадлежащие только им самим. При создании таблицы члена ми ролей sysadmin и db_owner таблица принадлежит пользователю dbo.

П table_name Имя, которое будет присвоено таблице. Для хранения имени таблицы отво дится 256 байт, однако, т. к. имя указывается в формате Unicode, то оно не должно превышать 128 символов. Комбинация имени таблицы и имени ее владельца должна быть уникальна в пределах базы данных. То есть один пользователь не может создать две таблицы с одинаковым именем, но раз ным пользователям разрешено создавать одноименные таблицы. Для доступа к таким таблицам необходимо будет указывать помимо имени самой таблицы еще и имя ее владельца.

С Замечание ^ Если создается локальная временная таблица, то ее имя не должно превышать 116 символов вместе с префиксом #. Подобное ограничение связано с некоторыми особенностями хранения имен временных таблиц. Временные таблицы всегда соз даются в системной базе данных Tempdb. Если при создании временной таблицы указывается имя любой другой базы данных, то оно игнорируется, а таблица все равно создается в базе данных Tempdb.

О column_definition Эта конструкция определяет свойства столбца. Синтаксис этой конструкции и ее использование будет рассмотрено в отдельном разделе данной главы.

О column_name AS computed_column_expression С помощью этого аргумента можно создать вычисляемые (computed) столбцы.

Значения таких столбцов вычисляются каждый раз заново при обращении к ним. Например, если в таблице имеется строка, в которой существуют столб цы с ценой товара (price) и его количество (count), то столбец с общей це 960 Часть IV. Разработка и сопровождение баз данных ной товара (cost) может быть вычислен автоматически. Для этого при созда нии таблицы необходимо использовать следующую конструкцию:

cost AS count * cost В структуре таблицы хранится только формула, по которой происходит вычис ление значений, тогда как сами значения не хранятся. Поэтому невозможна вставка или изменение значений в вычисляемых полях. При создании вычис ляемого столбца необходимо указать его имя (аргумент coiumnname) и после ключевого слова AS выражение (аргумент computed_coiumn_expression), по которому будет вычисляться значение поля.

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

Помимо того, что вычисляемые поля не разрешено изменять, для них нельзя устанавливать ограничения целостности Unique, Primary Key, Foreign Key и Default.

( Замечание ^ В SQL Server 2000 стало возможным индексирование вычисляемых столбцов, что нельзя было осуществлять в более ранних версиях SQL Server.

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

П [,...п] Данная конструкция говорит о том, что через запятую может быть указано множество определений столбцов или ограничений целостности. Все столбцы и ограничения целостности должны быть описаны до того, как будут опреде ляться группы файлов для хранения таблицы и столбцов image, t e x t и ntext.

П ON { f i l e g r o u p | DEFAULT} С помощью этого аргумента можно явно определить группу файлов (filegroup), в которой необходимо создать таблицу. Группа файлов должна существовать в базе данных. Если этот аргумент опускается или указывается DEFAULT, то таблица будет создана в группе файлов, определенной как группа файлов по умолчанию.

П TEXTIMAGE_ON ( f i l e g r o u p I DEFAULT} Если в таблице определены текстовые столбцы с типом данных t e x t и ntext или столбцы с типом данных image, то данные столбцы можно хранить в от дельной группе файлов. Это делается для повышения производительности операций обработки данных. Обработка данных в столбцах с перечисленны Глава 21. Работа с таблицами ми типами данных требует много ресурсов системы. Тем не менее, в боль шинстве операций эти данные не обрабатываются. Совместное хранение обычных и перечисленных данных снижало бы производительность системы.

Поэтому рекомендуется "тяжелые" данные и индексы располагать в отдель ных группах файлов, которые, в свою очередь, размешаются на отдельных жестких дисках. Если аргумент TEXTIMAGEON опускается или указывается значение DEFAULT, TO столбцы с типом данных image, t e x t и ntext будут размещены в группе файлов по умолчанию.

Определение столбцов Как уже было сказано, обычные, не вычисляемые столбцы определяются с по мощью конструкции coiumn_def i n i t i o n, имеющей синтаксис:

column_definition : : = {column_name data_type} [COLLATE collation_name] [[ DEFAULT c o n s t a n t _ e x p r e s s i o n ] I [IDENTITY [ ( ' s e e d, increment ) [NOT FOR REPLICATION]]] ] [ROWGUIDCOL] [ column_constraint ] [... n ] Рассмотрим подробно назначение и использование каждого из аргументов:

О column_name Имя, которое будет иметь столбец. Имя должно быть уникальным в пределах таблицы. Так как для хранения имен объектов в SQL Server 2000 использует ся тип данных с поддержкой Unicode, то в имени столбца допускается указа ние русских символов. Если в имени столбца применяются запрещенные символы, такие как пробел, %, * и т. д., или имя столбца совпадает с зарезер вированными словами, то имя столбца при создании должно быть заключено в квадратные скобки. Указание имени столбца обязательно с одним исклю чением. Если создаваемый столбец будет иметь тип данных timestamp, то.

разрешается не приводить имя столбца. В этом случае ему будет присвоено И Я timestamp.

М П data_type После имени столбца через пробел указывается тип данных, который будут иметь хранимые в столбце значения. Разрешается применение как стандарт ных типов данных SQL Server 2000, так и пользовательских типов данных (UDDT, User Defined Data Type). При указании пользовательских типов дан ных следует учитывать, что возможность хранения значений NULL, опреде ленная на уровне типа данных при его создании, может быть изменена на уровне таблицы.

• COLLATE collation_name Данный параметр позволяет указать сопоставление, которое будет использо ваться для столбца. Подробно указание сопоставления было рассмотрено в разд. "Выбор сопоставления" в предыдущей главе. Здесь же скажем, что в слу 962 Часть IV. Разработка и сопровождение баз данных чае неуказания рассматриваемого параметра для столбца будет использовать ся сопоставление, определенное на уровне базы данных.

П DEFAULT constant_expression С помощью этого аргумента можно определить значение по умолчанию, ко торое будет присваиваться соответствующему полю строки, если при ее вставке пользователь явно не указал конкретное значение. Значение по умолчанию не может быть применено к столбцам с типом данных time stamp или с установленным свойством IDENTITY. В качестве значений по умолча нию могут применяться константы, системные переменные и функции, а также любые выражения, построенные на их основе. Использование ссылок на другие столбцы запрещено.

• IDENTITY [(seed, increment)] Указание этого аргумента предписывает создать столбец с поддержкой авто матической нумерации. При вставке новой строки в таблицу SQL Server автоматически обеспечивает вставку в поле IDENTITY уникального значения, монотонно увеличивающегося при вставке каждой новой строки. Свойство IDENTITY может быть установлено только для столбцов с типом данных i n t, s m a l l i n t, t i n y i n t, d e c i m a l (р,0) И numeric (p, 0 ). В пределах ОДНОЙ таблицы можно создать только один столбец с установленным свойством IDENTITY.

Естественно, определение значения по умолчанию для столбца с установлен ным свойством IDENTITY невозможно. По умолчанию нумерация строк в таб лице начинается с 1 и при вставке каждой новой строки это значение увели чивается на 1. Однако можно указать иное первоначальное значение и шаг приращения. Первоначально значение указывается с помощью аргумента seed, а шаг приращения — с помощью аргумента increment.

П NOT FOR REPLICATION По умолчанию явная вставка значений в столбец с установленным свойством IDENTITY не разрешена. SQL Server 2000 будет генерировать значения для этого столбца автоматически. Однако при использовании репликации необ ходимо обеспечить идентичность данных как на издателе, так и на подпис чиках. При репликации данных между таблицами с установленным свойст вом IDENTITY при вставке строк с таблицу на издателе в столбце IDENTITY ИМ могут быть присвоены значения, отличные от аналогичных значений на из дателе. Чтобы избежать этого и гарантировать идентичность данных на всех участниках репликации, при создании столбца IDENTITY указывается опция NOT FOR REPLICATION. Это разрешает явную вставку значений в столбцы IDENTITY процессами репликации.

• ROWGUIDCOL Если при определении столбца указывается аргумент ROWGUIDCOL, TO ЭТОТ столбец воспринимается SQL Server 2000 как столбец глобального уникального идентификатора строки (row global unique identifier Column). Такие столбцы предназначены для выполнения специальных операций, например, при реп ликации сведением (merge replication). Свойство ROWGUIDCOL может быть уста Глава 21. Работа с таблицами новлено только для столбца с типом данных uniqueidentifier. Причем это свойство может быть определено только для одного столбца таблицы.

С Замечание ^ Наличие свойства ROWGUIDCOL не гарантирует уникальности значений в столбце и не обеспечивает автоматического заполнения столбца при вставке новой строки.

При необходимости пользователь должен вручную установить для столбца ограни чение целостности unique и определить значение по умолчанию как N E W I D O.

Функция NEW () генерирует значения глобального идентификатора, которые с высо кой вероятностью уникальны в пределах планеты.

П column_constraint Эта конструкция определяет ограничения целостности на уровне столбца.

Синтаксис и использование этой конструкции будет подробно рассмотрено в следующем разделе.

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

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

c o l u m n _ c o n s t r a i n t : : = [CONSTRAINT c o n s t r a i n t _ n a m e ] {[NULL I NOT NULL] | [{PRIMARY KEY I UNIQUE} [CLUSTERED I NONCLUSTERED] [WITH FILLFACTOR = f i l l f a c t o r ] [ON { f i l e g r o u p I DEFAULT}]] I [[ FOREIGN KEY] REFERENCES r e f _ t a b l e [ ( r e f _ c o l u m n ) J [ON DELETE {CASCADE I NO ACTION}] [ ON UPDATE {CASCADE I NO ACTION}] [NOT FOR REPLICATION] ] I CHECK [NOT FOR REPLICATION] (logical_expression) } Рассмотрим назначение и использование вышеперечисленных аргументов:

• CONSTRAINT constraint_name Ключевое слово CONSTRAINT указывает на то, что далее следует описание ог раничений целостности. С помощью аргумента constraint_name указывается имя, которое будет присвоено ограничению целостности. Имя ограничения целостности должно быть уникально в пределах базы данных. Указание кон струкции CONSTRAINT constraintname не обязательно. Оно обычно исполь gg4 Часть IV. Разработка и сопровождение баз данных зуется лишь тогда, когда ограничению необходимо присвоить определенное имя.

• NULL I NOT NOLL С помощью этих опций определяется, будет ли возможным хранение в столбце неопределенных значений или нет. Для одного столбца допускается применение только одного из аргументов. При указании NULL хранение не определенных значений разрешено, тогда как при указании NOT NULL запре щается. Если при создании столбца не было явно указано, будет она хранить значения NULL ИЛИ нет, то для ограничения целостности берется значение по умолчанию, определяемое с помощью команд A N S I N U L L D F L T O N И ANSI_NULL_DFLT_OFF.

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

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

) ( Замечание Для одного и того же столбца не могут быть одновременно установлены ограниче ния целостности Primary Key и Unique.

CLUSTERED I NONCLUSTERED С помощью этих ключевых слов определяется, какой тип индекса будет создан для ограничений целостности Primary Key и Unique. При указании ключевого слова CLUSTERED для соответствующего ограничения целостности будет создан кластерный индекс. При указании NONCLUSTERED будет создан некластерный индекс. В таблице может быть только один кластерный индекс. По умолчанию для ограничения целостности Primary Key создается кластерный индекс, а для Unique — некластерный. Если же при создании таблицы для ограничения це лостности Unique был создан кластерный индекс, то для первичного ключа по умолчанию будет создан некластерный индекс.

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

О WITH FILLFACTOR = fillfactor Этот аргумент задает фактор заполнения (fill factor) страниц для создаваемых кластерных или некластерных индексов. Значение фактора заполнения мо Глава 21. Работа с таблицами жет колебаться в пределах от 1% до 100%. Чем ниже значение фактора за полнения, тем больше места остается на страницах для вставки новых значе ний и тем выше производительность в целом операций вставки. Однако при установке слишком низкого значения фактора заполнения для хранения ин дексных данных потребуется достаточно много места. По умолчанию при своено значение 0, что соответствует 100% заполнению страниц с обеспече нием дополнительных резервов для расщепления страниц.

• ON { f i l e g r o u p I DEFAULT} С помощью этого аргумента можно явно определить группу файлов (filegroup), в которой должны располагаться страницы индекса создавае мого ограничения целостности. Группа файлов должна существовать в базе данных. Если этот аргумент опускается или указывается DEFAULT, TO индекс будет организован в группе файлов, определенной как группа файлов по умолчанию.

• FOREIGN KEY...REFERENCES ref_table [(refcolumn)] С помощью этой конструкции определяется внешний ключ таблицы. Ключе вые слова FOREIGN KEY могут не использоваться. После ключевого слова REFERENCES указывается имя таблицы, со столбцом которой будет связывать ся ограничение целостности Foreign Key. Это ограничение целостности свя зывается с одним столбцом главной таблицы. Для столбца главной таблицы, с которым связывается ограничение целостности Foreign Key, должно быть установлено ограничение целостности Primary Key или Unique.

Имя таблицы, с которой связывается внешний ключ, указывается с помощью аргумента ref_tabie. По умолчанию внешний ключ связывается с первичным ключом. Но можно связать внешний ключ с любым другим столбцом. Для этого с помощью аргумента ref_coiumn указывается имя нужного столбца.

• ON DELETE {CASCADE I NO ACTION} Предписывает использовать для соответствующего внешнего ключа ограниче ние целостности Cascade или No Action на удаление строк в главной таблице.

Таким образом, удаление строк в главной таблице будет приводить к удалению соответствующих строк (при указании CASCADE) В создаваемой таблице или от мене операции удаления строки главной таблицы (при указании NO ACTION).

О ON UPDATE {CASCADE I NO ACTION} Предписывает использовать для соответствующего внешнего ключа ограни чение целостности Cascade или No Action на изменение строк в главной таб лице. Таким образом, изменение первичного ключа в главной таблице будет приводить к модификации соответствующих строк (при указании CASCADE) В создаваемой таблице или отмене операции изменения строки главной табли цы (при указании NO ACTION).

О NOT FOR REPLICATION Если ожидается, что в таблицу с установленным ограничением целостности Foreign Key будут реплицированы строки из другой базы данных, но при 966 Часть IV. Разработка и сопровождение баз данных этом не станут реплицироваться строки главной таблицы, то это вызовет на рушение ограничения целостности. Чтобы избежать этого, при создании внешнего ключа необходимо указать NOT FOR REPLICATION. ЭТО запрещает использование ограничения целостности при выполнении операций репли кации. Аналогичный результат вызовет использование NOT FOR REPLICATION и для ограничения целостности Check — при выполнении операций вставки или изменения данных системой репликации проверка значений выполнять ся не будет.

(~ Замечание } Обычно пользователю не нужно указывать NOT FOR R E P L I C A T I O N, Т. К. все необ ходимые изменения вносятся автоматически подсистемой репликации.

C EK HC (logical_expression) Ключевое слово CHECK говорит о том, что далее в скобках будет указано про верочное ограничение целостности, которое задается в виде логического вы ражения. Логическое выражение задается с помощью аргумента logicaiexpression. Если логическое выражение возвращает значение TRUE, то операция вставки или изменения значений в соответствующем столбце разрешается. Если же возвращается значение FALSE, TO выдается соответст вующее сообщение об ошибке и операция отменяется.

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

Ограничения целостности на уровне таблицы В предыдущем разделе были описаны ограничения целостности на уровне от дельного столбца. Однако иногда бывает необходимо определить некоторые ог раничения целостности на уровне таблицы. Например, при определении огра ничений целостности Primary Key или Unique на уровне столбца можно использовать только один столбец. Однако иногда бывает необходимо опреде лить ограничение целостности на основе нескольких столбцов. Для этого нужно реализовать эти ограничения целостности на уровне таблицы.

Для определения ограничений целостности на уровне таблицы существует кон струкция tabie_constraint, имеющая синтаксис:

t a b l e _ c o n s t r a i n t : : = [CONSTRAINT c o n s t r a i n t _ n a m e ] ( [ {PRIMARY KEY | UNIQUE} [CLUSTERED | NONCLUSTERED] { (column [ASC I DESC] [,... n ] ) } -[WITH FILLFACTOR = f i l l f a c t o r ] Глава 21. Работа с таблицами [ON { filegroup I DEFAULT }] ] I FOREIGN KEY [(column [,...n])] REFERENCES ref_table [(ref_column [,...n])J [ON DELETE {CASCADE I NO ACTION}] [ON UPDATE {CASCADE | NO ACTION}] [NOT FOR REPLICATION] I CHECK [ NOT FOR REPLICATION] (search_condit ions) } Рассмотрим назначение и использование параметров команды, специфичных для ограничений целостности на уровне таблиц. Мы не будем перечислять па раметры, представленные в предыдущих разделах:

П CONSTRAINT constraint_name Ключевое слово CONSTRAINT указывает на то, что далее следует описание ог раничений целостности. С помощью аргумента c o n s t r a i n t n a m e указывается имя, которое будет присвоено ограничению целостности. Имя ограничения целостности должно быть уникально в пределах базы данных. Указание кон струкции CONSTRAINT constraint_name не обязательно. Оно обычно приме няется лишь тогда, когда ограничению необходимо присвоить определенное имя.

П PRIMARY KEY, UNIQUE, CLUSTERED, NONCLUSTERED Назначение этих аргументов аналогично назначению одноименных аргумен тов, используемых при описании ограничений целостности на уровне столб ца. Более подробно назначение перечисленных аргументов было рассмотрено в предыдущем разделе.

• (column [ASC I DESC] [,...n]) С помощью этой конструкции определяется список столбцов, на которые бу дет налагаться описываемое ограничение целостности. Указание ключевых слов ASC (по возрастанию) и DESC (ПО убыванию) позволяет явно задать, как должен быть отсортирован индекс (если он создается).

Примеры создания таблиц В качестве иллюстрации описанной выше команды CREATE TABLE рассмотрим практические примеры применения этой команды.

Необходимо создать таблицу Employees, содержащую шесть столбцов. Первый из столбцов имеет имя EmpiD и должен быть использован в качестве первичного ключа таблицы. Для этого столбца нужно определить автонумерацию с 1000 и с шагом 1. Два следующих столбца — PassNum и PassSer — используются для хранения, соответственно, номера и серии паспорта сотрудника. Требуется обеспечить уникальность комбинации этих двух столбцов. Последние три столбца (Lname, Fname И Sname) служат для хранения фамилии, имени и отчества сотрудника. Для столбца с фамилией следует запретить хранение значений NULL, тогда как для столбцов с именем и отчеством, напротив — разрешить. Описан ная таблица может быть создана с помощью следующего кода:

gS8 Часть IV. Разработка и сопровождение баз данных CREATE TABLE Employees (EmpID int IDENTITY (1000,1) PRIMARY KEY, PassNum nvarchar(6) NOT NULL, PassSer nvarchar(lO) NOT NULL, Lname nvarchar(30) NOT NULL, Fname nvarchar(30) NULL, Sname nvarchar(30) NULL, UNIQUE (PassNum, PassSer)) В следующем примере, приведен код для создания таблиц jobs, employee и pub l i s h e r s базы данных pubs. Приведенный пример использует практически все ограничения целостности.

— Код создания таблицы jobs CREATE TABLE jobs (job_id smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, job_desc varchar(50) NOT NULL DEFAULT 'New Position - title not formalized yet 1, min_lvl tinyint NOT NULL CHECK (min_lvl=10), max_lvl tinyint NOT NULL CHECK (max_lvl=250)) — Код создания таблицы employee CREATE TABLE employee (emp_id empid CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED CONSTRAINT CK_emp_id CHECK (emp_id LIKE [A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]' or emp_id LIKE ' [A-Z]-[A-Z] [1-9] [0-9] [0-9] [0-9] [0-9] [FM] ' ), /* Каждый идентификатор служащего содержит три символа, представляющие ини циалы служащего, потом пять десятичных цифр в диапазоне от 10000 до 99999 и затем пол служащего (М - для мужчины, W - для женщины). Для буквы отчества, если она неизвестна, разрешено использовать дефис. */ fname varchar(20) NOT NULL, minit char(l) NULL, lname varchar(30) NOT NULL, job_id smallint NOT NULL DEFAULT 1 REFERENCES jobs(job_id), job_lvl tinyint DEFAULT 10, pub_id char(4) NOT NULL DEFAULT ('9952') REFERENCES publishers(pub_id), hire_date datetime NOT NULL DEFAULT (getdate(J)) — Код создания таблицы publishers CREATE TABLE publishers (pub_id char(4) NOT NULL CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED CHECK (pub_id IN ( Ч 3 8 9 1, '0736', '0877', '1622', '1756') OR pub_id LIKE '99(0-9][0-9]'), pub_name varchar(40) NULL, city varchar(20) NULL, state char(2) NULL, country varchar(30) NULL DEFAULT('USA')) Изменение таблиц Сразу же после того, как таблица будет создана, можно приступить к ее исполь зованию. Можно вносить в нее данные, создавать индексы, дополнительные ограничения целостности, изменять и удалять данные и т. д. Однако иногда бы вает необходимо изменить структуру уже существующих таблиц. В версиях SQL Глава 21. Работа с таблицами Server ранее 7.0 пользователи были весьма ограничены в возможностях измене ния таблиц. Точнее, таблицы вообще нельзя было изменять. Пользователь дол жен был создать новую таблицу с нужной структурой, перенести в нее данные из старой таблицы, уничтожить ее и переименовать новую таблицу, присвоив ей имя старой таблицы. Изменение таблиц было занятием весьма утомительным.

Начиная с SQL Server 7.0, была введена возможность изменения структуры таб лиц. Строго говоря, изменение таблиц происходит тем же способом, что и в пре дыдущих версиях. То есть создается новая таблица, в нее копируются данные из таблицы, затем старая таблица удаляется, и новой таблице присваивается ее имя.

При этом сохраняются все права доступа, выданные пользователям базы данных к таблице и отдельным ее столбцам. Однако теперь вся эта работа лежит на ядре SQL Server 2000, а не на пользователе. От пользователя требуется лишь указать, что нужно изменить. На этом его участие заканчивается. Такое изменение в SQL Server весьма приятно. Теперь вы в любой момент можете добавить новые столб цы или удалить ненужные, не опасаясь головной боли и различных проблем.


Однако следует отметить, что изменение столбцов таблицы разрешено только для баз данных SQL Server 2000. Если база данных была перенесена с SQL Server 6.x или имеет уровень совместимости (compatibility level) 65 или 60, то из менение столбцов не разрешается. Кроме того, и при выполнении изменений столбцов в базах данных с уровнем совместимости 70 и 80 существует ряд огра ничений, запрещающих изменение следующих столбцов:

• столбцов С ТИПОМ даННЫХ t e x t, ntext И image;

• вычисляемых (computed) столбцов или столбцов, на которые ссылаются вы числяемые столбцы;

• столбцов, скопированных в результате репликации или публикуемых столб цов;

П индексированных столбцов. Исключение составляют столбцы с типом дан ных varchar или varbinary, если их тип данных не изменяется и новый размер столбца равен или больше первоначального значения;

• столбцов, для которых с помощью команды CREATE STATISTICS пользовате лем определена статистика. Для изменения таких столбцов необходимо пред варительно уничтожить сгенерированную для них статистику, и только после этого изменять столбец;

П столбцов, используемых в первичном или внешнем ключе;

• столбцов, для которых определено ограничение целостности Unique или Check. Однако разрешены изменения размера столбца с типом данных пере менной ДЛИНЫ (varchar, nvarchar И varbinary);

• столбцов, для которых определено значение по умолчанию. Однако для та ких столбцов разрешается изменение длины, размера и точности с условием, что тип данных не изменяется или если между новым и старым типом дан ных поддерживается неявное преобразование;

П столбца с установленным свойством ROWGUIDCOL.

Часть IV. Разработка и сопровождение баз данных ( Замечание J Все указанные ограничения распространяются на изменение столбцов. Однако не которые из них не относятся к операции удаления столбца (например, три послед них ограничения).

Изменение таблиц может выполняться как с помощью графического интерфей са Enterprise Manager, так и с помощью команды Transact-SQL. Сейчас мы рас смотрим изменение таблиц средствами Transact-SQL. Использование же возмож ностей Enterprise Manager для изменения таблиц будет рассмотрено отдельно в одном из следующих разделов.

Для изменения таблиц с помощью Transact-SQL используется команда ALTER TABLE, имеющая следующий синтаксис:

ALTER TABLE t a b l e { [ALTER C L M column_name OU N (new_data_type [ ( p r e c i s i o n !, s c a l e ] ) ] [COLLATE collation_name] [NULL I NOT NOLL J I {ADD I DROP} ROMGUIDCOL } } ADD ( [ c o l u m n _ d e f i n i t i o n ] column_name AS c o m p u t e d _ c o l u m n _ e x p r e s s i o n } [,... n ] [WITH CHECK I WITH NOCHECK] ADD { t a b l e _ c o n s t r a i n t } [,... n ] DROP {[CONSTRAINT] c o n s t r a i n t _ n a m e | COLUMN column} [,... n ] {CHECK | NOCHECK} CONSTRAINT {ALL I c o n s t r a i n t _ n a m e [,... n ] } {ENABLE I DISABLE} TRIGGER {ALL I t r i g g e r _ n a m e [,... n ] } } Рассмотрим подробно использование каждого из аргументов:

• table Имя таблицы, которая будет изменяться. При необходимости может быть до полнительно указано имя владельца таблицы (owner) и имя базы данных (database), в которой находится таблица. Имя владельца необходимо указы вать в том случае, если таблица принадлежит не текущему пользователю и не dbo. Указание имени базы данных требуется только в том случае, если табли ца находится не в текущей базе данных.

П ALTER COLUMN column_name Ключевые слова ALTER COLUMN показывают, что далее следует описание из менений столбца. Аргумент coiumn_name указывает имя столбца, который не обходимо изменить, добавить или удалить. Имя столбца может быть опуще но, если создаваемый столбец будет иметь тип данных timestamp. В этом случае ему автоматически присваивается имя timestamp.

П new_data_type [(precision!, scale])] Аргумент new_data_type определяет тип данных, который должен иметь столбец после изменения. Если используется нецелочисленный тип данных, то дополнительно можно указать, какое количество десятичных цифр будет храниться (аргумент precision) и сколько цифр их них будет после запятой (аргумент scale).

Глава 21. Работа с таблицами ( Замечание J При изменении тапа данных в столбце необходимо следить за тем, чтобы значения из старого типа данных могли быть конвертированы в новый тип данных. Если же это невозможно, то придется удалить все строки из таблицы или установить во всех строках значение NULL В изменяемом столбце. Кроме того, запрещается изменение типа данных уже созданного столбца на тип данных timestamp. При изменении ти па данных в столбце с установленным ограничением целостности IDENTITY необ ходимо, чтобы новый тип данных также поддерживал автонумерацию.

• C L A E collation_name OLT С помощью данного параметра указывается имя сопоставления, которое должно в дальнейшем использоваться для столбца. Подробно сопоставления рассматривались в разд. "Выбор сопоставления" главы 20.

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

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

Иначе столбец будет содержать NULL.

( Замечание } Нельзя разрешить хранение NULL ДЛЯ столбцов, входящих в первичный ключ. Также нельзя запретить хранение NULL ДЛЯ столбца, в котором присутствует хоть одно значение NULL. Прежде необходимо изменить строки таблицы таким образом, что бы в изменяемом столбце не было NULL.

• {ADD I DROP} ROWGUIDCOL Эта конструкция определяет, было ли добавлено или удалено свойство ROWGUIDCOL из изменяемого столбца. Конструкция может использоваться только для столбцов с типом данных u n i q u e i d e n t i f i e r. Только для одного столбца в таблице может быть установлено свойство ROWGUIDCOL.

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

д/2 Часть IV. Разработка и сопровождение баз данных • column_definition Эта конструкция определяет свойства столбца. Ее синтаксис и использование были рассмотрены в разд. "Определение столбцов" ранее в этой главе.

• column_name AS computedcolumn_expression С помощью этого аргумента можно создать вычисляемые (computed) столбцы.

Значения таких столбцов вычисляются каждый раз заново при обращении к ним. Более подробно описание и работа с вычисляемыми столбцами были рассмотрены ранее в этой главе в разд. "Создание таблиц" щп описании ана логичного параметра.

П [,... п ] Конструкция указывает, что с помощью одной команды ALTER TABLE может быть добавлено множество столбов. Для этого их определения должны быть перечислены через запятую.

П [WITH CHECK I WITH NOCHECK] ADD С помощью этой конструкции сообщается, что необходимо добавить ограни чение целостности на уровне таблицы. Наличие WITH CHECK при добавлении ограничения целостности обеспечивает проверку существующих данных столбца (или столбцов), для которого создается ограничение целостности, на соответствие требованиям ограничения. При использовании WITH NOCHECK подобной проверки выполняться не будет. Однако вновь вставляемые строки все-таки станут подвергаться проверке ограничением целостности.

О table_constraint Эта конструкция описывает ограничения целостности на уровне таблицы, которые необходимо добавить. Синтаксис и использование этой конструкции были подробно рассмотрены в разд. "Ограничения целостности на уровне таб лицы"ранее в этой главе.

О DROP {[CONSTRAINT] c o n s t г а i n t _ n a m e | COLUMN column_name} Эта конструкция применяется для удаления из таблицы ограничений целост ности или столбцов. При удалении ограничения целостности с помощью ар гумента c o n s t r a i n t n a m e указывается его имя и дополнительно ключевое слово CONSTRAINT. При удалении столбца необходимо обязательно использо вать ключевое слово COLUMN, после которого указывается имя удаляемого столбца (coiumn_name). Нельзя удалить:

• реплицированные столбцы;

• индексированные столбцы;

• столбцы, для которых определены ограничения целостности Check, Unique, Primary Key или Foreign Key;

• столбцы, для которых определено значение по умолчанию (default) или которые связаны с объектами по умолчанию;

• столбцы, для которых определены правила (rule).

Глава 21. Работа с таблицами ( ) Замечание Запрещение на удаление перечисленных выше столбцов связано с тем, что все огра ничения целостности, значения по умолчанию, индексы и правила хранятся в виде от дельных объектов базы данных и связываются со столбцом таблицы. При удалении столбца связь оказалась бы потерянной. Поэтому необходимо сначала уничтожить все связанные со столбцом объекты, а уже после этого удалять сам столбец.


• {CHECK I NOCHECK} CONSTRAINT Эта конструкция предназначена для включения или отключения ограничения целостности. При использовании CHECK происходит активизация ограниче ния целостности. Все вставляемые строки будут проверяться на соответствие требованиям указанного ограничения целостности. При наличии NOCHECK ог раничение целостности отключается, после чего проверка на соответствие требованиям не выполняется. Только ограничения целостности CHECK И FOREIGN KEY могут быть активизированы или отключены.

• A L I constraint_name[,...n] L Эта конструкция используется для описания ограничений целостности, кото рые должны быть активизированы или отключены. При указании ключевого слова ALL будут изменены все ограничения целостности, определенные в таб лице. Отдельные же ограничения целостности могут быть указаны с помо щью аргументы c o n s t r a i n t n a m e. При необходимости можно указать множе ство ограничений, перечислив их через запятую.

• {ENABLE I DISABLE} TRIGGER С помощью этой конструкции можно разрешить (ENABLE) ИЛИ запретить (DISABLE) использование в таблице указанного триггера. При запрещении использования триггера он не удаляется и все еще остается определенным для таблицы. Тем не менее, при выполнении команд INSERT, UPDATE ИЛИ DELETE триггер выполняться не будет. Для физического удаления триггера необходимо применить команду DROP TRIGGER. Запрещенный триггер может быть позже снова разрешен для использования.

D ALL I t r i g g e r _ n a m e f,... n ] С помощью этой конструкции указываются триггеры, использование кото рых необходимо разрешить или запретить. При указании ключевого слова ALL действие будет выполняться над всеми триггерами таблицы. Отдельные триггеры могут быть указаны через запятую.

Получение информации о таблице Нередко бывает, что необходимо получить информацию о структуре таблицы, определенных в ней ограничениях целостности и триггерах, а также узнать, какие таблицы являются зависимыми от рассматриваемой таблицы, и от каких таблиц зависит она сама. С помощью графического интерфейса Enterprise Manager полу чить эту информацию довольно легко. Однако мы рассматриваем только ис пользование возможностей Transact-SQL и хранимых процедур.

Q74 Часть N. Разработка и сопровождение баз данных Для получения информации о таблицах и других объектах базы данных приме няются системные хранимые процедуры. Наиболее часто используется хранимая процедура sp_heip, специально предназначенная для получения информации о различных объектах базы данных. Она имеет следующий синтаксис:

sp_help [[Sobjname =] name] Единственный аргумент этой хранимой процедуры (name) предназначен для ука зания имени объекта, о котором необходимо получить информацию. Например, для получения информации о таблице authors базы данных pubs следует вы полнить команду:

USE pubs sp help 'authors' С Замечание } Одной из особенностей работы хранимой процедуры s p _ h e l p является то, что она работает только с объектами, находящимися в текущей базе данных. Нельзя ука зать имя объекта, расположенного в другой базе данных. При попытке указать в имени объекта имя базы данных, отличное от имени текущей базы данных, будет выдано сообщение об ошибке.

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

О Информация о таблице. Выводится единственная строка со следующими столбцами:

• Name — имя таблицы, о которой предоставляется информация;

• owner — имя владельца таблицы;

• Туре — тип объекта. Для пользовательских таблиц указывается значение user table;

• Created datetirae — дата создания таблицы.

П Список столбцов. В этом блоке содержится множество колонок, каждая из которых отвечает за определенное свойство столбца. Каждая строка блока соответствует одному из столбцов таблицы. Порядок вывода информации о столбцах соответствует их порядку в таблице. Рассмотрим список колонок блока и их назначение:

• coiumn_name — имя столбца таблицы. Тип данных этой колонки — nvarchar(128), т. к. имя столбца таблицы может иметь длину до 128 символов в стандарте Unicode.

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

Тип данных самой колонки nvarchar (126).

Глава 21. Рабата с таблицами computed — в этом столбце может быть либо значение yes, либо значение • по. Если указано первое значение, то рассматриваемый столбец таблицы является вычисляемым (computed), в противном случае столбец стандарт ный. Тип данных КОЛОНКИ varchar (35).

• Length — количество байт, отводимых для хранения данных столбца. Тип данных этой колонки i n t.

• Prec — используется только для числовых типов данных. Указывается максимальное количество десятичных цифр (в т. ч. и после запятой), ко торое будет храниться в столбце. Тип данных колонки char (5).

• scale — предназначен только для числовых типов данных. Указывается количество десятичных цифр после запятой, которое будет храниться в столбце. Для целочисленных типов данных приводится значение 0. Тип данных колонки char (5).

• Nuiiable — в этом столбце может быть либо значение yes, либо значение по. Если указано первое значение, то рассматриваемый столбец таблицы позволяет хранить неопределенные значения (NULL). В противном случае хранение таких значений запрещено. Тип данных колонки varchar (35).

• TrimTraiiingsBianks — указывает, удаляются ли в столбце конечные пробелы. Если указано yes, то конечные пробелы автоматически удаля ются. Если же указано по, то пробелы остаются. Удаление пробелов под держивается только для символьных типов данных. Если столбец имеет иной тип данных, то в этой колонке будет указано значение (n/а). Тип данных КОЛОНКИ v a r c h a r (35).

• FixedLenNullinSource — эта колонка в версии SQL Server 2000, как и в SQL Server 7.0, не используется и оставлена только для обеспечения об ратной совместимости с предыдущими версиями. Тип данных колонки varchar(35).

• Collation — имя сопоставления, которое имеет соответствующий столбец таблицы.

• Столбец identity. В этом блоке выводится информация о столбце с установ ленным свойством IDENTITY. Информация выводится в следующих колонках:

• i d e n t i t y — имя столбца, для которого установлено свойство IDENTITY.

Тип данных этой колонки nvarchar(l28). Если в таблице нет столбца с установленным свойством IDENTITY, ТО В ЭТОЙ колонке будет выведена строка No identity column defined.

Seed — начальное значение, с которого начинается нумерация строк в • таблице. Тип данных колонки numeric, однако может быть указано толь ко целочисленное значение.

increment — шаг приращения. На указанное число будет каждый раз при • вставке новой строки увеличиваться значение в столбце IDENTITY. ТИП данных колонки numeric, однако может быть указано только целочислен ное значение.

3 2 Эк. 97$ Часть IV. Разработка и сопровождение баз данных • Not For Replication — колонка имеет тип данных i n t, однако в ней может быть указано всего два значения — 0 и 1. Если указана 1, то свой ство IDENTITY будет игнорироваться при вставке строк подсистемой реп ликации. В этом случае в столбец IDENTITY станут помещаться значения, полученные при репликации данных. Если же указывается 0, то автону мерация будет использоваться и при вставке строк системой репликации.

• Столбец ROWGUIDCOL. В этом блоке выводится информация о столбце, для которого установлено свойство ROWGUIDCOL. Информация выводится в един ственной колонке с именем RowGuidCol, имеющей тип данных sysname. В ней приводится имя столбца таблицы, для которого установлено свойство ROWGUIDCOL. Если такого столбца в таблице нет, то будет выведена строка No rowguidcol column defined.

П Группа файлов таблицы. В этом блоке указывается имя группы файлов, в ко торой размещены обычные данные таблицы. Столбцы с типом данных t e x t, ntext и image могут быть размещены в другой группе файлов. Имя группы файлов выводится в колонке Data_iocated_on_fiiegroup, имеющей тип данных nvarchar(128).

П Описание индексов. Этот блок содержит имена и описания индексов, создан ных для столбцов таблицы. Информация об индексах выводится в колонках:

• indexname — имя, присвоенное индексу при создании. Колонка имеет ТИП данных sysname.

• i n d e x d e s c r i p t i o n — описание индекса, куда входит информация о типе индекса (кластерный или нет, уникальный или нет, первичный ключ и т. д.) и группе файлов, в которой он размещается. Тип данных этой ко лонки varchar(210).

• i n d e x k e y s — в этом столбце содержится список столбцов таблицы, ко торые включены в описываемый индекс. Если индекс создан более чем для одного столбца, то столбцы перечисляются через запятую. Колонка имеет тип данных nvarchar (2078).

• Ограничения целостности — в этом блоке описываются ограничения целост ности, определенные для столбцов таблицы. Информация выводится в сле дующих колонках:

• c o n s t r a i n t t y p e — тип ограничения целостности. Вместе с типом ограни чения может указываться имя столбца, для которого оно определено. На пример, для ограничения целостности Check для столбца a u i d может быть указано CHECK on column a u i d. Тип данных этой колонки nvarchar (14 6).

• Constraintname — имя, присвоенное ограничению целостности при соз дании. Если при создании ограничения имя было не указано явно, то SQL Server 2000 генерирует его автоматически (что-то вроде CK_authors_au_id_08EA5793). Колонка имеет ТИП данных nvarchar (128).

• D e i e t e a c t i o n — имеет смысл только для ограничения целостности внеш него ключа и указывает действие, которое будет предприниматься при уда лении строки в главной таблице. Возможны значения cascade и No Action.

Глава 21. Работа с таблицами1 :\ • U p d a t e a c t i o n — как и предыдущий столбец, используется только для ограничения целостности внешнего ключа и указывает действие, которое будет предприниматься при изменении значений в первичном ключе главной таблицы. Возможны значения cascade и NO Action.

• s t a t u s e n a b i e d — в этой колонке приводится, активно ли ограничение це лостности. В SQL Server 2000 можно отключить ограничения целостности Check и Foreign Key. Если ограничение целостности неактивно, то в колон ке будет значение Disabled. Для активных ограничений выводится Enabled.

Для ограничений целостности других типов, не поддерживающих отключе ние, выводится (п/а). Колонка имеет тип данных varchar (8).

• s t a t u s _ f o r _ r e p i i c a t i o n — в этой колонке указывается, существует ли ограничение целостности при репликации. Можно запретить применение ограничений целостности Check и Foreign Key, чтобы они не использова лись при работе подсистемы репликации. Если ограничение целостности применяется при репликации, то в колонке указывается i s F o r R e p i i c a t i o n. В противном случае колонка будет содержать значе ние Not_For_Repiication. Для ограничений целостности помимо Check и Foreign Key также иногда выводится значение (п/а). Колонка имеет тип данных varchar(19).

• constraint_keys — в этой колонке указывается текст, описывающий ог раничения целостности. Для ограничения целостности Check выводится логическое условие, для первичного ключа — имена столбцов, для огра ничения целостности Default — значение по умолчанию и т. д. Колонка Имеет ТИП данных nvarchar (2078).

П Зависимые таблицы. В этом блоке указываются таблицы, в которых опреде лено ограничение целостности Foreign Key, ссылающееся на столбец рас сматриваемой таблицы. Каждая зависимая таблица выводится в отдельной строке. Через двоеточие приводится имя ограничения целостности, связы вающее строки таблицы. Информация выводится в единственной колонке Table is referenced by, имеющей ТИП данных nvarchar (516).

Зависимые объекты Часто при работе с базами данных бывает необходимо узнать, какие объекты базы данных ссылаются на определенную таблицу, и на какие объекты ссылается сама таблица. Хранимая процедура s p h e l p, описанная в предыдущем разделе, выводит информацию о свойствах таблицы, в т. ч. и список таблиц, связанных внешним ключом с рассматриваемой таблицей. Однако этой информации иногда бывает недостаточно. От таблицы могут зависеть не только другие таблицы, но и храни мые процедуры, представления и некоторые другие объекты. Кроме того, собст венно таблица, в свою очередь, может зависеть от другой таблицы. Информация о связях между объектами может, понадобиться, когда необходимо изменить, пере именовать или удалить таблицу и нужно убедиться, что эти действия не нарушат целостность базы данных и работоспособность приложений.

32* 978 Часть IV. Разработка и сопровождение баз данных Для получения информации об объектах, зависящих от конкретной таблицы, применяется хранимая процедура spdepends, имеющая синтаксис:

sp_depends [Sobjname =] 'object' Единственный аргумент процедуры ('object') обозначает имя объекта базы данных, для которого будет выведена информация о зависимостях. Объект дол жен находиться в текущей базе данных. Информация о связанных объектах, на ходящихся в других базах данных, не выводится.

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

Рассмотрим пример вызова хранимой процедуры spdepends для получения информации об объектах, связанных с системной таблицей sysiogins систем ной базы данных Master:

USE Master EXEC sp_depends ' s y s i o g i n s В результате будет выведена следующая информация:

In the current database, the specified object references the following:

name type updated selected column ( Замечание ^ На самом деле список объектов несколько больше приведенного, который приведен с целью экономии места в книге.

Глава 21. Работа с таблицами В первом блоке выводится информация об объектах, на которые ссылается рас сматриваемая таблица. Во втором блоке — список объектов, которые ссылаются на рассматриваемую таблицу. В представленном примере таблица syslogins используется только хранимыми процедурами. Однако на другие таблицы могут ссылаться представления, хранимые процедуры и таблицы.

Связь через ключи Хранимая процедура s p h e l p возвращает список таблиц, связанных ограниче нием целостности Foreign Key с рассматриваемой таблицей. Однако иногда этой информации бывает недостаточно. Бывают ситуации, когда необходимо полу чить более подробную информацию о связях между таблицами.

В SQL Server 2000 существует системная хранимая процедура s p f k e y s, предна значенная для получения информации о связях между таблицами посредством первичных и внешних ключей. Синтаксис этой хранимой процедуры таков:

sp_fkeys [@pktable_name =] 'pktable_name' [,[@pktable_owner =] 'pktable_owner'] [, [@pktable_qualifier =] 'pktable_qualifier'] {, [@fktable_name =] 'fktable_name'} [, [@fktable_owner =] 'fktable_owner'] [,[@fktable_qualifier =] 'fktable_qualifier'] Рассмотрим подробно назначение и использование параметров этой хранимой процедуры:

О [@pktable_name =] 'pktable_name' С помощью этого аргумента определяется имя таблицы, имеющей первичный ключ, для которой будет выводиться информация.

П [@pktable_owner =] 'pktable_owner'] Этот аргумент определяет имя владельца таблицы, указанной с помощью предыдущего аргумента. Если параметр опущен, тогда подразумевается, что таблица принадлежит текущему пользователю или владельцу базы данных (dbo, database owner).

П [@pktable_qualifier =] 'pktable_qualifier'] С помощью этого аргумента определяется имя базы данных, в котором нахо дится таблица, указанная с помощью первого аргумента. Если параметр опу щен, то предполагается, что таблица находится в текущей базе данных.

П [@fktable_name =] 'fktable_name' Этот аргумент определяет имя таблицы с внешним ключом, для которой не обходимо вывести информацию о зависимостях. Дополнительно, с помощью аргумента [@fktable_owner =] ' fktable pwner' ] может быть указано имя владельца таблицы. Кроме того, также можно задать имя базы данных (аргумент [@fktable_qualifier =] 'fktable qualifier ]).

980 Часть IV. Разработка и сопровождение баз данных ( Замечание ~) Хранимая процедура sp_f keys может быть использована для получения информа ции о зависимостях как для таблиц с первичным ключом, так и для таблиц с внеш ним ключом. Кроме того, одновременно можно указать оба типа таблиц.

Удаление таблиц Последняя операция по управлению таблицами, которую мы рассматриваем, — это их удаление. Для удаления таблиц предназначена команда DROP TABLE, имеющая синтаксис:

DROP TABLE t a b l e _ n a m e Имя таблицы, которую необходимо удалить, указывается с помощью аргумента tabie_name. Вместе с именем таблицы может быть приведено- имя владельца таблицы. Кроме того, допускается использование имени базы данных. Таким образом, можно удалять таблицы, расположенные в различных базах данных.

Существуют определенные ограничения на удаление таблиц. Нельзя удалить таблицу, если на нее с помощью ограничения целостности Foreign Key ссылает ся одна или более таблиц. Необходимо сначала удалить ограничения целостно сти (или связанные таблицы), и только после этого удалять таблицу.

При удалении таблицы уничтожаются все ограничения целостности (constraints) и триггеры (triggers), которые были определены для нее. Однако уничтожения пра вил (rules) и умолчаний (defaults) не происходит. Их необходимо удалять вручную.

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

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

При удалении всех строк из таблицы удаление самой таблицы не происходит.

Также не происходит удаления таблиц и при их усечении (truncate) с помощью К о м а н д ы TRUNCATE TABLE.

Управление таблицами средствами Enterprise Manager Последние несколько разделов были посвящены рассмотрению работы с табли цами средствами Transact-SQL. Этот метод, хотя и предлагает пользователям широкие возможности, требует знания синтаксиса команд и хранимых проце Глава 21. Работа с таблицами дур, а также сравнительно больших затрат времени на выполнение тех или иных действий. Более удобным для выполнения большинства действий является ис пользование инструмента Enterprise Manager, который предлагает пользователям удобный графический интерфейс для выполнения различных действий по управлению таблицами.

Данный раздел, а точнее его подразделы, будут посвящены рассмотрению рабо ты с таблицами. Каждая база данных имеет свой собственный набор таблиц, просмотреть который средствами Enterprise Manager можно с помощью папки Tables (рис. 21.2), имеющейся в каждой базе данных. Для каждой таблицы ука зывается ее имя (столбец Name), владелец (столбец Owner), тип (столбец Туре) — пользовательский (User) или системный (System), а также дата создания таблицы (столбец Create Date).



Pages:     | 1 |   ...   | 24 | 25 || 27 | 28 |   ...   | 33 |
 





 
© 2013 www.libed.ru - «Бесплатная библиотека научно-практических конференций»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.