Пользовательские типы данных в Microsoft SQL Server без использования SQLCLR. Особенности создания и применения

Пользовательские типы данных можно создавать не только при помощи, рассмотренной ранее, технологии SQLCLR, но и с посредством обычного Transact-SQL.

В чём отличия между этими двумя подходами и почему в качестве основного способа работы с пользовательскими типами данных даже в официальной литературе от Microsoft предлагается именно SQLCLR?

Всё дело в том, что пользовательские типы данных определяемые средствами только Transact-SQL обязательно должны основываться на уже имеющихся базовых типах данных.

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

NOT NULL означает, что этот тип данных не может иметь значение NULL.

Таким образом создания нового типа данных по сути не происходит. Вместо этого просто создаётся псевдоним для некоторого уже имеющегося типа.

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

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

Если создать в некоем скрипте переменную данного типа работа с ней ничем не будет отличаться о работы с любой другой табличной переменной.

В результате запроса из переменной ManTable будут выведены только что добавленные в неё данные.

Вывод из переменной табличного типа

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

  • Ключи (первичный, уникальный, внешний);
  • Индексы (кластеризованный и некластеризованный)

При этом ограничения разделяются на две группы:

  • Ограничения столбца;
  • Ограничения таблицы.

Различие между ними в том, что:

  • В ограничениях таблицы могут присутствовать любые её столбцы, в том числе в виде списка (например, если первичный ключ включает несколько столбцов);
  • В ограничениях на уровне таблицы не могут описываться внешние ключи.

Оправдано ли использование типов данных создаваемых при помощи одного Tratnsact-SQL? Безусловно оправдано!

Если необходимо неоднократно работать с данными базовых типов, но определённого формата или определённой структуры, они могут существенно упростить задачу. Тем более, что создание типа данных средствами SQLCLR гораздо более сложный и трудоёмкий процесс, который, ко всему прочему, сопряжён с созданием и загрузкой в базу дополнительных сборок и поэтому в подобных ситуациях совершенно себя не оправдывает. Но, если для её выполнения требуется совершенно новый тип со своими уникальными свойствами и, при необходимости, методами, следует использовать только технологию SQLCLR.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *