Управление пользовательскими типами данных

Управление пользовательскими типами данных. В главе 5 в разделе Типы данных были рассмотрены встроенные в SQL Server 2000 типы данных.

Эти типы данных всегда имеются в распоряжении пользователей и могут быть использованы для столбцов таблиц, представлений, переменных и т. д. Однако помимо встроенных типов данных пользователи могут на их основе создавать свои собственные типы данных - так называемые пользовательские типы данных. Пользовательские типы данных user-defined data type - это типы данных, создаваемые пользователями.

Они создаются на основе системных типов данных. Пользовательские типы данных часто используются, когда в нескольких таблицах необходимо хранить однотипные значения, причем гарантировать, что столбцы в таблице будут иметь одинаковый размер, тип данных и чувствительность к данным NULL. Например, с помощью пользовательского типа данных можно хранить номера и серии паспорта. Для создания пользовательского типа данных используется системная хранимая процедура sp addtype sp addtype typename type. phystype system data type . nulltype null type, owner owner name Если необходимо сделать пользовательский тип данных доступным во всех создаваемых базах данных, добавьте этот тип в базу данных model.

Здесь используются следующие аргументы. О type - имя создаваемого типа данных. При выборе имени создаваемого типа данных необходимо следовать установленным правилам именования объектов. Имя должно быть уникальным в пределах владельца, то есть не совпадать с именами других объектов.

Разные пользователи могут употреблять одинаковые имена для создаваемых объектов. О system data type - системный тип данных, на основе которого создается пользовательский тип данных. Можно выбрать один из следующих типов данных binary n Image smalldatetime Bit Int smallint char n nchar n text Datetime Ntext tinyint Decimal Numeric uniqueidentifier decimal p, s numeric p, s varbinary n Float nvarchar n varchar n float n Real Кавычки необходимы, когда помимо самого типа данных требуется указание дополнительных параметров.

Аргумент п идентифицирует длину системного типа данных в пользовательском типе данных, аргумент р - максимальное суммарное до и после десятичной точки количество цифр для числовых типов данных в пользовательском типе данных, аргумент s - максимальное количество десятичных цифр после запятой в пользовательском типе данных. Нельзя создать пользовательский тип данных на основе системного типа timestamp. О null type. Значение этого аргумента определяет, будет ли пользовательский тип данных хранить значения NULL Аргумент null type имеет тип varchar S и может принимать одно из трех следующих значений NULL разрешается хранение NULL , NOT NULL хранение NULL запрещается или NONULL используется значение по умолчанию. Если аргумент null type не указывается, то при создании пользовательского типа используется значение по умолчанию, установленное для базы данных с помощью системной хранимой процедуры sp dboption.

Текущее значение, установленное в базе данных, можно получить с помощью функции GETANSINULL Значение аргумента 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.