Использование и изменение экземпляров пользовательских типов
Изменения: 5 декабря 2005 г.
Существуют следующие способы работы с определяемыми пользователем типами:
- создание таблиц со столбцами определяемого пользователем типа;
- вставка и изменение значений в столбце определяемого пользователем типа;
- использование переменных и параметров определяемого пользователем типа.
Создание таблиц со столбцами определяемого пользователем типа
Чтобы создать таблицу со столбцом определяемого пользователем типа, необходимо просто указать имя столбца и соответствующее имя определяемого пользователем типа. Этот процесс ничем не отличается от создания столбцов системных типов или типов-псевдонимов. Для создания столбцов определяемого пользователем типа среды CLR требуется разрешение REFERENCES для этого типа.
Создание таблицы со столбцом определяемого пользователем типа
Вставка и изменение значений в столбце определяемого пользователем типа
Существует возможность вставить и изменить значения столбца и изменить значения переменных и параметров определяемого пользователем типа.
Примечание. |
---|
Пользовательские типы нельзя изменить после создания, поскольку изменения могут сделать недействительными данные в таблицах или индексах. Для изменения типа необходимо либо его удалить, либо создать его повторно, или же выполнить инструкцию ALTER ASSEMBLY с использованием предложения WITH UNCHECKED DATA. Дополнительные сведения см. в разделе ALTER ASSEMBLY (Transact-SQL). |
Чтобы вставить или изменить значения в столбце определяемого пользователем типа, необходимо сделать следующее:
Задать значение системного типа данных SQL Server, если определяемый пользователем тип поддерживает явные или неявные преобразования этого типа. Следующий пример демонстрирует, как обновить значение в столбце определяемого пользователем типа
Point
путем явного преобразования строки.UPDATE Cities SET Location = CONVERT(Point, '12.3:46.2') WHERE Name = 'Anchorage'
Вызвать метод, отмеченный в качестве мутатора определяемого пользователем типа, для выполнения обновления. В следующем примере вызывается метод мутатора типа point с именем
SetXY
, обновляющий состояние экземпляра типа:UPDATE Cities SET Location.SetXY(23.5, 23.5) WHERE Name = 'Anchorage'
Примечание. SQL Server возвращает ошибку, если метод мутатора вызывается или возвращает значение NULL языка Transact-SQL, либо если новое значение, порожденное методом мутатора, соответствует значению NULL. Изменить значение свойства или общее поле определяемого пользователем типа. Выражение, представляющее значение, должно подлежать явному преобразованию к типу свойства. В следующем примере изменяется значение свойства
X
определяемого пользователем типа point:UPDATE Cities SET Location.X = 23.5 WHERE Name = 'Anchorage'
Для изменения различных свойств того же столбца определяемого пользователем типа нужно выполнить несколько инструкций UPDATE или использовать метод мутатора для типа.
В следующем примере в таблицу вставляются значения типа Point
:
INSERT INTO Cities (Name, Location)
VALUES ('Anchorage', CONVERT(Point, '23.5, 23.5'))
Вставка значений определяемого пользователем типа в таблицу или представление
- INSERT (Transact-SQL)
- Обновление значения определяемого пользователем типа в таблице или представлении
Использование определяемого пользователем типа в качестве переменных и параметров
Можно объявить переменную языка Transact-SQL, параметр функции или процедуры языка Transact-SQL или Microsoft .NET Framework в качестве определяемого пользователем типа. Применяются следующие правила:
- Требуется разрешение EXECUTE на данный тип.
- При создании функции, хранимой процедуры или триггера, содержащего объявление определяемого пользователем типа с привязкой к схеме, требуется разрешение REFERENCES на тип.
При использовании имени, состоящего из одного компонента, SQL Server будет искать ссылку на тип в следующем порядке:
- Схема текущего пользователя в текущей базе данных.
- Схема dbo в текущей базе данных.
- Собственное пространство типов системы.
Объявление определяемого пользователем типа в качестве переменной языка Transact-SQL или параметра функции или процедуры
Ограничения на использование определяемых пользователем типов
При создании и работе с определяемыми пользователем типами необходимо помнить следующее:
- При создании определяемого пользователем типа на SQL Server нельзя определить длину, масштаб, точность и другие метаданные.
- Столбцу, переменной или параметру нельзя назначить определяемый пользователем тип, определенный в другой базе данных. Дополнительные сведения см. в разделе Использование пользовательских типов в нескольких базах данных.
- Чтобы определить, совпадает ли определяемый пользователем тип с типом, созданным ранее, не сравнивайте идентификаторы типов, поскольку они действительны только во время жизни определяемого пользователем типа и могут быть стать недействительными. Вместо этого сравнивайте имя типа CLR, состоящее из четырех частей, имя сборки и байты сборки.
- Столбцы sql_variant не могут содержать экземпляры определяемого пользователем типа.
- Пользовательские типы нельзя использовать в качестве значений по умолчанию в процедурах, функциях и триггерах CLR и в функциях секционирования.
- На определяемые пользователем типы нельзя ссылаться в вычисляемых столбцах переменных table.
См. также
Основные понятия
Работа с определяемыми пользователем типами данных CLR
Другие ресурсы
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
Версия | Журнал |
---|---|
5 декабря 2005 г. |
|