SQL Server 2000
Страница 60

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

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

Например, при создании пользовательских типов данных для описания но­меров факса и телефона можно использовать следующий код: ЕХЕС sp_addtype telephone, "varchar(24)", "NOT NULL" EXEC sp_addtype fax, "varchar(24)", "NULL"

Хранимая процедура sp_addtype добавляет описание типа в системную таб­лицу systypes текущей базы данных. В принципе, если посмотреть на эту таблицу, то можно заметить, что в ней также перечислены встроенные типы данных. То есть и типы данных, выглядящие встроенными, на уровне конк­ретной базы данных являются пользовательскими, но имеющими те же свой­ства и имена, что и встроенные. Например, выберем из таблицы systypes базы данных pubs список доступных типов данных:

SELECT name FROM systypes

Будет возвращен следующий результат:

name

image

text

uniqueidentifier

tinyint

smallint

int

smalldatetime

real

money

datetime

float

sql_variant

ntext

bit

decimal

numeric

small money

bigint

varbinary

varchar

binary

char

timestamp

nvarchar

nchar

sysname

id

tid

empid

(29 row(s) affected)

Как видно, в одной таблице перечислены и встроенные, и пользовательские типы данных (i d, ti d и emi d).

Управление правилами

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

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

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

Для создания правила используется следующая команда Transact-SQL: CREATE RULE rule AS condition_expression

Рассмотрим аргументы команды. О rule— имя правила. При выборе имени необходимо придерживаться общих

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

О condition_expression — логическое выражение, определяющее условие, на­кладываемое на значения. В качестве условия можно использовать любые логи­ческие команды, арифметические операторы, встроенные функции и предика­ты (например IN, BETWEEN, LIKE). В выражении condition_expression нельзя ссылаться на столбцы таблиц или на любые другие объекты базы данных. Встро­енные функции также не должны ссылаться на объекты базы данных. В выра­жении допустима одна локальная переменная, начинающаяся с символа @. В качестве имени переменной можно использовать произвольную строку. При выполнении правила переменная будет содержать значение, которое пользо­ватель пытается ввести в столбец с помощью команды INSERT или UPDATE. Пе­ременная может использоваться в любых логических операциях. Приведем пример создания правила: CREATE RULE rule_one AS @val>=100 AND (ava1<170 CREATE RULE rule_two AS

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

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63