Значение аргумента 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. При связывании правила со столбцом таблицы или пользовательским типом данных следует убедиться, что тип данных в правиле и в объекте привязки совпадают. Сервер не отслеживает соответствия типов данных при связывании. Ошибка выдается только тогда, когда пользователь изменяет значение и сервер начинает выполнение правила. Строго говоря, сервер вообще не выполняет проверки соответствия типов, он лишь констатирует ошибку при сравнении величин, имеющих несовместимый тип.