Поделиться через


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

Существуют следующие способы работы с определяемыми пользователем типами:

  • создание таблиц со столбцами определяемого пользователем типа;

  • вставка и изменение значений в столбце определяемого пользователем типа;

  • использование переменных и параметров определяемого пользователем типа.

Создание таблиц со столбцами определяемого пользователем типа

Чтобы создать таблицу со столбцом определяемого пользователем типа, необходимо просто указать имя столбца и соответствующее имя определяемого пользователем типа. Этот процесс ничем не отличается от создания столбцов системных типов или типов-псевдонимов. Для создания столбцов определяемого пользователем типа среды 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'))

Вставка значений определяемого пользователем типа в таблицу или представление

UPDATE (Transact-SQL)

Использование определяемого пользователем типа в качестве переменных и параметров

Можно объявить переменную языка Transact-SQL, параметр функции или процедуры языка Transact-SQL или Microsoft .NET Framework в качестве определяемого пользователем типа. Применяются следующие правила:

  • Требуется разрешение EXECUTE на данный тип.

  • При создании функции, хранимой процедуры или триггера, содержащего объявление определяемого пользователем типа с привязкой к схеме, требуется разрешение REFERENCES на тип.

При использовании имени, состоящего из одного компонента, SQL Server будет искать ссылку на тип в следующем порядке:

  1. Схема текущего пользователя в текущей базе данных.

  2. Схема dbo в текущей базе данных.

  3. Собственное пространство типов системы.

Объявление определяемого пользователем типа в качестве переменной языка Transact-SQL или параметра функции или процедуры

Ограничения на использование определяемых пользователем типов

При создании и работе с определяемыми пользователем типами необходимо помнить следующее:

  • При создании определяемого пользователем типа на SQL Server нельзя определить длину, масштаб, точность и другие метаданные.

  • Столбцу, переменной или параметру нельзя назначить определяемый пользователем тип, определенный в другой базе данных. Дополнительные сведения см. в разделе Использование пользовательских типов в нескольких базах данных.

  • Чтобы определить, совпадает ли определяемый пользователем тип с типом, созданным ранее, не сравнивайте идентификаторы типов, поскольку они действительны только во время жизни определяемого пользователем типа и могут быть стать недействительными. Вместо этого сравнивайте имя типа CLR, состоящее из четырех частей, имя сборки и байты сборки.

  • Столбцы sql_variant не могут содержать экземпляры определяемого пользователем типа.

  • Пользовательские типы нельзя использовать в качестве значений по умолчанию в процедурах, функциях и триггерах CLR и в функциях секционирования.

  • На определяемые пользователем типы нельзя ссылаться в вычисляемых столбцах переменных table.