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


Выполнение операций над определяемыми пользователем типами данных

Над экземплярами определяемых пользователем типов данных можно выполнять различные операции. К этим операциям относятся:

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

  • выполнение преобразований типа данных;

  • возврат значений определяемого пользователем типа данных клиенту SQL;

  • использование определяемых пользователем типов данных в предложениях ORDER BY;

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

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

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

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

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

ПредупреждениеВнимание!

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

ПредупреждениеВнимание!

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

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

ПримечаниеПримечание

Среда Среда SQL Server Management Studio возвращает значения определяемого пользователем типа в двоичном представлении. Чтобы получать значения определяемых пользователем типов данных в строковом или XML-формате, используйте функцию CAST или CONVERT.

Преобразование определяемых пользователем типов данных

Явные и неявные преобразования с использованием определяемых пользователем типов данных можно выполнять так, как это описано в следующей таблице.

В:

Определяемый пользователем тип

Двоичный

nvarchar

xml

ИЗ:

Определяемый пользователем тип

Явно

Явно

Неявно

Двоичный

Неявно

nvarchar

Неявно

XML

Неявно

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

DECLARE @c ComplexNumber
SET @c = CONVERT(ComplexNumber, '(1,2i)')
SELECT CAST(@c AS xml).query('//Real/text()')

В следующем примере данные типа xml неявно преобразуются к определяемому пользователем типу данных ComplexNumber.

DECLARE @x xml, @u ComplexNumber
SET @x = '<ComplexNumber><Real>100</Real><Imaginary>4</Imaginary></ComplexNumber>'
SET @u = @x -- implicit convert
SELECT @u.ToString()

Дополнительные сведения см. в разделе Функции CAST и CONVERT (Transact-SQL).

Возврат значений определяемых пользователем типов данных клиенту SQL

Если при выполнении инструкции SELECT или FETCH клиенту SQL возвращается столбец или выражение определяемого пользователем типа данных, способ, которым API-интерфейс клиента будет получать доступ к этому столбцу, зависит от того, является ли этот API-интерфейс управляемым (ADO.NET) или неуправляемым (ODBC или OLE DB). Если клиент использует ADO.NET, он может получить экземпляр типа данных в виде двоичного значения с помощью метода GetValue класса SqlDataReader или в виде объекта. Если клиент использует OLE DB, он получит значения определяемого пользователем типа данных в двоичном виде. Если клиент использует ODBC, он получит значение определяемого пользователем типа данных только в двоичном виде.

Использование предложений ORDER BY, GROUP BY и PARTITION BY с определяемыми пользователем типами данных

Над определяемыми пользователем типами данных можно выполнять операции ORDER BY, GROUP BY и PARTITION BY, если эти типы поддерживают двоичный режим сопоставления. Тип поддерживает двоичный режим упорядочивания, если его флаг IsByteOrdered в атрибуте SqlUserDefinedType имеет значение true; этот атрибут указывается как часть определения типа. Данный флаг сигнализирует о том, что двоичное представление типа не нарушает семантическое упорядочивание элементов этого типа.

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

Для столбцов определяемых пользователем типов данных можно создавать индексы, если эти типы поддерживают двоичный режим сопоставления. Можно также создавать индексы для вычисляемых столбцов, определенных как вызовы методов для столбцов определяемых пользователем типов данных, если эти методы помечены как детерминированные. Дополнительные сведения см. в разделе Определяемые пользователем типы данных CLR.