Смекни!
smekni.com

(Plist IN ("MATRIX". "ACC", "SIS", "KIT")

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


Для связывания правила со столбцом таблицы или пользовательским типом данных используется хранимая процедура sp_bindru1e со следующим синтакси­сом:

sp_b1ndrule [@ru1ename =] "rule". [@objname =] "objectjname" [. [@futureonly =] "futureonlyjflag"]

Назначение параметров процедуры sp_bindrule соответствует назначению аналогичных параметров хранимой процедуры sp_bindef ault, описанной в пре­дыдущем разделе.

Для «отвязывания» правила используется хранимая процедура sp_unbindrule: sp_unb1ndrule [@objname =] "object_name" [. [@futureonly =] "futureonly_flag"]

Для получения сведений о правиле (имени владельца и даты создания) ис­пользуйте хранимую процедуру sp_hel p с указанием в качестве аргумента име­ни правила: sp_he1p "rule_name"

Для получения текста кода Transact-SQL, определяющего правило, исполь­зуйте хранимую процедуру sp_helptext: sp_helptext "rule_name "

Для изменения имени правила используйте хранимую процедуру sp_rename: sp_rename @objname='rule_one' @newname='rule_two'

Управление умолчаниями

Умолчание (default) — это значение, которое будет присвоено столбцу табли­цы при вставке строки, если в команде вставки явно не указано значение для этого столбца.

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

Сейчас мы рассматриваем умолчания, которые существуют в базе данных как самостоятельные объекты. Умолчания предоставляют удобный способ быс­тро назначать одинаковые значения по умолчанию множеству столбцов таблиц базы данных. Тем не менее задавать значения по умолчанию для столбцов реко­мендуется, используя синтаксис команд CREATE TABLE и ALTER TABLE.


Созданное умолчание само по себе не выполняет никаких действий. Его не­обходимо связать с каким-нибудь столбцом таблицы или пользовательским ти­пом данных. Тип данных умолчания должен соответствовать типу данных, установленному для столбца, с которым связывается умолчание.

Для создания умолчания используется следующая команда: CREATE DEFAULT default AS constant_expression

Здесь default— имя умолчания, a constant_express1on — его значение.

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

В качестве значения constant_expression можно использовать не только кон­станты, но и любые математические выражения и встроенные функции. Строки символов и даты должны заключаться в одиночные кавычки. Перед бинарными данными должен указываться префикс Ох, а перед денежным типом — символ $. Если размер значения по умолчанию превышает размер, заданный для данных в столбце, выполняется усечение значения по умолчанию до требуемого размера.

Приведем пример создания текстового умолчания: CREATE DEFAULT default one AS "RIAC Industries"

Создание умолчания не может выполняться в одном пакете с другими командами Transact-SQL.

Умолчание может быть создано только в текущей базе данных. После того как умолчание создано, его можно связать со столбцом таблицы или пользователь­ским типом данных. Для связывания умолчания с объектом базы данных исполь­зуется хранимая процедура sp_bindefault, имеющая следующий синтаксис:

sp_bindefault [@defname =] "default",

[(Pobjname =] "objectjiame"

[. [@future]only =] "futureonly_flag"]

Здесь используются следующие аргументы.

О "default" — имя умолчания. Это имя, указанное при создании умолча­ния в команде CREATE DEFAULT.

О "object_name" — имя объекта, к которому привязывается умолчание. Для свя­зывания умолчания со столбцом таблицы имя объекта указывается в форме col umn. tab! e. Если же используется другая форма имени, то считается, что умолчание связывается с пользовательским типом данных. Умолчание не мо­жет быть связано со столбцом типа timestamp, столбцом с установленным ог­раничением целостности IDENTITY или со столбцом, связанным с другим умол­чанием. В последнем случае необходимо отвязать от столбца старое умолчание, а уже затем привязывать новое. Если умолчание связывается со столбцом, име­ющим пользовательский тип данных, и с этим типом данных связано другое умолчание, то умолчание, определенное для столбца, имеет приоритет над умол­чанием, установленным для пользовательского типа данных. Если в имени объекта присутствуют недопустимые символы, то в аргументе ob ject_name не­обходимо использовать разделители [ и ] для указания имени объекта.

О "futureonly_flag" — этот аргумент требуется только при связывании умол­чания с пользовательским типом данных и не нужен при связывании со столб-


цом таблицы. При указании этого аргумента в столбцы, имеющие пользова­тельский тип данных, с которым связывается умолчание, не будет внесено никаких изменений. Если же аргумент f utureonl у не указывается, то для всех столбцов пользовательского типа данных применяется значение по умолчанию, связанное с этим типом данных. Пример связывания умолчания со столбцом таблицы:

ЕХЕС sp_b1ndefault "default_one",

"[employes 013].[company name]"

Пример связывания умолчания с пользовательским типом данных:

ЕХЕС sp_bindefault "default_one".

"emp_data". "futureonly"

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

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

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

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

Для удаления умолчания из базы данных используется следующая команда: DROP DEFAULT {default} [,...n]

Здесь аргумент default определяет имя умолчания, которое необходимо уда­лить. Используя одну команду DROP DEFAULT, можно удалить несколько умол­чаний. Для этого необходимо перечислить их через запятую.

Нельзя удалить умолчание, связанное со столбцом таблицы или пользователь­ским типом данных. Перед удалением необходимо отвязать умолчание от всех объек­тов, а уже затем выполнять команду DROP DEFAULT. Для отвязывания умолчания используется хранимая процедура sp_unbindefault со следующим синтаксисом:

sp_unbindefault [@objname =] "object_name"

[, [@futureonlу =] "futureonly_flag"]


Здесь используются следующие аргументы.

О "object_name" — имя столбца таблицы или пользовательского типа данных, от которых необходимо отвязать умолчание. Когда умолчание отвязывается от пользовательского типа данных, оно автоматически отвязывается ото всех столбцов, имеющих этот тип данных, если только умолчание не было связа­но с этими столбцами явно и в команде не указан аргумент "futureonly".

О " f utureonl y_f 1 ag" — указывается только для пользовательских типов данных. Если этот аргумент имеет значение "futureonly", то умолчание не отвязыва­ется от столбцов, имеющих пользовательский тип данных. Если этот аргумент отсутствует, сервер автоматически отвяжет умолчание от всех столбцов. Для получения сведений о представлении (имени владельца и даты созда­ния) используйте хранимую процедуру sp_help с указанием в качестве аргу­мента имени умолчания: spjielp "default_one"

Для получения текста кода Transact-SQL, определяющего умолчание, исполь­зуйте хранимую процедуру sp_helptext: sp_helptext "default_one"

Для изменения имени умолчания используйте хранимую процедуру sp_rename: sp_rename @objname='defaul t_one' @newname='default_two'

Список литературы

  1. Мамаев Е., Шкарина Л. «Microsoft SQl Server 2000 для профессионалов».-СПб:Питер, 2001
  2. Хоторн Роб «Разработка баз данных, Micrososoft SQL Server 2000».-Вильямс, 2001
  3. Шарон Б., Мэйбл Грэг «Sql Server 2000, Энциклопедия программиста».-ДиаСофт, 2001