Использование и изменение экземпляров определяемых пользователем типов
Существуют следующие способы работы с определяемыми пользователем типами:
создание таблиц со столбцами определяемого пользователем типа;
вставка и изменение значений в столбце определяемого пользователем типа;
использование переменных и параметров определяемого пользователем типа.
Создание таблиц со столбцами определяемого пользователем типа
Чтобы создать таблицу со столбцом определяемого пользователем типа, необходимо просто указать имя столбца и соответствующее имя определяемого пользователем типа. Этот процесс ничем не отличается от создания столбцов системных типов или типов-псевдонимов. Для создания столбцов определяемого пользователем типа среды 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'))
Вставка значений определяемого пользователем типа в таблицу или представление
Обновление значения определяемого пользователем типа в таблице или представлении
Использование определяемого пользователем типа в качестве переменных и параметров
Можно объявить переменную языка Transact-SQL, параметр функции или процедуры языка Transact-SQL или Microsoft .NET Framework в качестве определяемого пользователем типа. Применяются следующие правила:
Требуется разрешение EXECUTE на данный тип.
При создании функции, хранимой процедуры или триггера, содержащего объявление определяемого пользователем типа с привязкой к схеме, требуется разрешение REFERENCES на тип.
При использовании имени, состоящего из одного компонента, SQL Server будет искать ссылку на тип в следующем порядке:
Схема текущего пользователя в текущей базе данных.
Схема dbo в текущей базе данных.
Собственное пространство типов системы.
Объявление определяемого пользователем типа в качестве переменной языка Transact-SQL или параметра функции или процедуры
Ограничения на использование определяемых пользователем типов
При создании и работе с определяемыми пользователем типами необходимо помнить следующее:
При создании определяемого пользователем типа на SQL Server нельзя определить длину, масштаб, точность и другие метаданные.
Столбцу, переменной или параметру нельзя назначить определяемый пользователем тип, определенный в другой базе данных. Дополнительные сведения см. в разделе Использование пользовательских типов в нескольких базах данных.
Чтобы определить, совпадает ли определяемый пользователем тип с типом, созданным ранее, не сравнивайте идентификаторы типов, поскольку они действительны только во время жизни определяемого пользователем типа и могут быть стать недействительными. Вместо этого сравнивайте имя типа CLR, состоящее из четырех частей, имя сборки и байты сборки.
Столбцы sql_variant не могут содержать экземпляры определяемого пользователем типа.
Пользовательские типы нельзя использовать в качестве значений по умолчанию в процедурах, функциях и триггерах CLR и в функциях секционирования.
На определяемые пользователем типы нельзя ссылаться в вычисляемых столбцах переменных table.
См. также