Реализация определяемых пользователем типов данных
Изменения: 14 апреля 2006 г.
В данном разделе описано создание и удаление определяемых пользователем типов данных среды CLR в SQL Server.
Создание определяемых пользователем типов данных
Для создания определяемого пользователем типа данных в SQL Server следует выполнить следующие действия в указанном порядке.
- Определить определяемый пользователем тип как класс или структуру на языке, поддерживаемом Microsoft .NET Framework. Дополнительные сведения о программировании типов данных CLR см. в разделе CLR User-Defined Types. Затем скомпилировать этот класс или структуру для создания сборки на платформе .NET Framework при помощи компилятора соответствующего языка.
- Зарегистрируйте эту сборку в SQL Server с помощью инструкции CREATE ASSEMBLY. Дополнительные сведения о сборках в SQL Server см. в разделе Сборки (компонент Database Engine).
- Создать тип, ссылающийся на зарегистрированную сборку.
Примечание. |
---|
Развертывание проекта SQL Server в Microsoft Visual Studio регистрирует сборку в базе данных, указанной для проекта. Развертывание проекта также создает пользовательские типы CLR в базе данных для всех определений класса, аннотированных в атрибуте SqlUserDefinedType. Дополнительные сведения см. в разделе Deploying CLR Database Objects. |
Примечание. |
---|
По умолчанию, реализованная в SQL Server функция выполнения кода CLR имеет значение OFF. Можно создавать, изменять и удалять объекты базы данных, которые ссылаются на модули управляемого кода, но эти ссылки не будут действовать в SQL Server, если параметр clr enabled не получит значение True с помощью sp_configure. |
Создание, изменение или удаление сборки
Создание определяемого пользователем типа
Удаление определяемых пользователем типов данных
Удаление определяемого пользователем типа
Примечание. |
---|
После создания определяемого пользователем типа его нельзя модифицировать, поскольку изменения могли бы сделать недействительными данные в таблицах или в индексах. Для изменения типа необходимо либо его удалить, либо создать его повторно, или же выполнить инструкцию ALTER ASSEMBLY с использованием предложения WITH UNCHECKED DATA. |
Определяемый пользователем тип данных не может быть удален, пока не будут удалены все ссылки на него. Это могут быть следующие ссылки.
- Столбцы, определенные на этом типе.
- Вычисляемые столбцы и ограничения CHECK, выражения которых ссылаются на этот тип.
- Привязанные к схеме представления и функции, содержащие в своих определениях выражения, которые ссылаются на этот тип.
- Параметры функций и хранимых процедур.
Поиск столбцов, имеющих ссылки на определяемый пользователем тип
В следующем примере получаются метаданные, содержащие сведения о столбцах, в определении которых имеются ссылки на определяемый пользователем тип ComplexNumber
.
SELECT * FROM sys.columns
WHERE user_type_id = TYPE_ID('ComplexNumber');
В следующем примере выполняется ограниченный минимальными правами доступа процесс получения метаданных, содержащих сведения о столбцах, в определении которых имеются ссылки на определяемый пользователем тип ComplexNumber
.
SELECT * FROM sys.column_type_usages
WHERE user_type_id = TYPE_ID('ComplexNumber');
Поиск выражений вычисляемых столбцов, выражений ограничения CHECK, а также выражений, привязанных к схеме представлений, и функций, в которых имеются ссылки на определяемый пользователем тип
В следующем примере получаются имена вычисляемых столбцов (и их таблиц), в которых содержатся ссылки на определяемый пользователем тип ComplexNumber
.
SELECT OBJECT_NAME(object_id) AS object_name,
COL_NAME(object_id, column_id) AS column_name
FROM sys.sql_dependencies
WHERE referenced_major_id = TYPE_ID('ComplexNumber')
AND class = 2
AND OBJECTPROPERTY(object_id, 'IsTable')=1;
В следующем примере получаются имена ограничений CHECK (и объектов, для которых они определены), в которых содержатся ссылки на определяемый пользователем тип ComplexNumber
.
SELECT SCHEMA_NAME(o.schema_id) AS schema_name,
OBJECT_NAME(o.parent_object_id) AS table_name,
OBJECT_NAME(o.object_id) AS constraint_name
FROM sys.sql_dependencies AS d
JOIN sys.objects AS o
ON o.object_id = d.object_id
WHERE referenced_major_id = TYPE_ID('ComplexNumber')
AND class = 2
AND OBJECTPROPERTY(o.object_id, 'IsCheckCnst')=1;
В следующем примере получаются имена привязанных к схеме функций и представлений определения, которые имеют ссылки на определяемый пользователем тип ComplexNumber
.
Примечание. |
---|
В SQL Server не поддерживается работа с взаимосвязями метаданных между типами данных, определяемых пользователем, и их использованием в телах хранимых процедур, триггеров, не привязанных к схеме функций или не привязанных к схеме представлений. |
SELECT SCHEMA_NAME(o.schema_id) AS dependent_object_schema,
OBJECT_NAME(o.object_id) AS dependent_object_name,
o.type_desc AS dependent_object_type,
d.class_desc AS kind_of_dependency,
d.referenced_major_id AS referenced_object
FROM sys.sql_dependencies AS d
JOIN sys.objects AS o
ON d.object_id = o.object_id
AND o.type IN ('FN','IF','TF', 'V')
WHERE d.class = 2
AND d.referenced_major_id IN (TYPE_ID('ComplexNumber'))
ORDER BY dependent_object_schema, dependent_object_name;
Поиск параметров, имеющих ссылки на определяемый пользователем тип
В следующем примере получаются имена параметров (и объектов, которым они принадлежат), в определении которых содержатся ссылки на определяемый пользователем тип ComplexNumber
.
SELECT OBJECT_NAME(object_id) AS object_name,
NULL AS procedure_number,
name AS param_name,
parameter_id AS param_num,
TYPE_NAME(p.user_type_id) AS type_name
FROM sys.parameters AS p
WHERE p.user_type_id = TYPE_ID('ComplexNumber')
ORDER BY object_name, procedure_number, param_num;
В следующем примере выполняется ограниченный минимальными правами доступа процесс получения метаданных, содержащих сведения о параметрах, в определении которых имеются ссылки на определяемый пользователем тип ComplexNumber
.
SELECT * FROM sys.parameter_type_usages
WHERE user_type_id = TYPE_ID('ComplexNumber');
См. также
Основные понятия
Работа с определяемыми пользователем типами данных CLR
Другие ресурсы
Образцы программирования для среды CLR
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
Версия | Журнал |
---|---|
14 апреля 2006 г. |
|