Executando operações em tipos definidos pelo usuário

Você pode executar uma variedade de operações em instâncias de tipos definidos pelo usuário. Essas operações incluem o seguinte:

  • Invocação de métodos ou recuperação de propriedades de um tipo definido pelo usuário.

  • Execução de conversões de tipo de dados.

  • Retorno de valores de tipo definidos pelo usuário a um cliente SQL.

  • Uso de cláusulas ORDER BY.

  • Criação de índices em colunas de tipo definidas pelo usuário.

  • Criação de colunas computadas.

Invocação de métodos ou recuperação de propriedades de um tipo definido pelo usuário.

Você pode invocar um método ou recuperar uma propriedade de um tipo definido pelo usuário em qualquer lugar que aparecer uma expressão escalar. É necessário ter a permissão EXECUTE no tipo. Métodos que alteram o estado dos dados fora de uma instrução UPDATE serão executados, mas as alterações serão ignoradas porque métodos mutáveis não são permitidos em consultas.

As cadeias de caracteres retornadas pelos métodos de tipo definidos pelo usuário assumem o agrupamento do banco de dados no qual o tipo definido pelo usuário foi criado, independente do banco de dados atual.

Observação sobre cuidadosCuidado

Os métodos e as propriedades que são usados nas instruções SELECT não devem ter efeitos colaterais. Se um método usado em uma instrução SELECT tiver efeitos colaterais, os resultados não serão determinísticos.

Observação sobre cuidadosCuidado

Quando invocações de método ou de propriedade ocorrerem em relação aos tipos definidos pelo usuário sobre os quais as colunas computadas são criadas e a invocação ocorrer no contexto de uma operação na coluna computada, as permissões EXECUTE não serão verificadas no tipo. Em vez disso, são verificadas permissões quando a coluna computada é criada.

Para invocar um método ou recuperar uma propriedade de um tipo definido pelo usuário

ObservaçãoObservação

O SQL Server Management Studio retorna valores de tipo definidos pelo usuário em representação binária. Para retornar valores de tipo definidos pelo usuário em cadeia de caracteres ou formato XML, use CAST ou CONVERT.

Execução de conversões de tipo de dados com tipos definidos pelo usuário

Você pode executar uma conversão implícita e explícita com tipos definidos pelo usuário como resumido na tabela a seguir.

 

PARA:

Tipo definido pelo usuário

Binário

nvarchar

xml

DE:

Tipo definido pelo usuário

 

Explícito

Explícito

Implícito

Binário

Implícito

 

 

 

nvarchar

Implícito

 

 

 

xml

Implícito

 

 

 

O exemplo a seguir converte explicitamente uma instância de tipo definido pelo usuário ComplexNumber para xml e invoca uma expressão XQuery sobre ela.

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

O exemplo a seguir converte implicitamente os dados xml para uma instância de tipo definido pelo usuário ComplexNumber.

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

Para obter mais informações, consulte CAST e CONVERT (Transact-SQL).

Retorno de valores de tipo definidos pelo usuário a um cliente SQL.

Quando uma coluna ou expressão de um tipo definido pelo usuário é retornada a um cliente SQL como resultado de uma instrução SELECT ou FETCH, a forma pela qual o cliente acessa a coluna depende se o cliente API é um API gerenciado (ADO.NET) ou um API não gerenciado (ODBC ou OLE DB). Se usar ADO.NET, o cliente poderá recuperar uma instância do tipo como um valor binário usando o método GetValue na classe SqlDataReader ou um objeto. Se usar o OLE DB, o cliente receberá valores de tipo definidos pelo usuário como um valor binário. Se usar o ODBC, o cliente receberá o valor de tipo definido pelo usuário apenas como um valor binário.

Uso de cláusulas ORDER BY, GROUP BY e PARTITION BY com tipos definidos pelo usuário

Você poderá executar operações ORDER BY, GROUP BY e PARTITION BY com tipos definidos pelo usuário se o tipo oferecer suporte a ordenação binária. Um tipo será ordenado de forma binária se ele tiver o sinalizador IsByteOrdered definido como verdadeiro no atributo SqlUserDefinedType que é especificado como parte da definição do tipo Esse sinalizador indica que a representação binária para o tipo está na ordem semanticamente correta para aquele tipo.

Criação de índices em colunas de tipo definidas pelo usuário

Você pode criar índices em colunas de tipo definidas pelo usuário se o tipo oferecer suporte à ordenação binária. Você também pode criar índices em colunas computadas que são definidas como invocações de método de uma coluna de tipo definida pelo usuário, desde que os métodos sejam marcados como determinísticos. Para obter mais informações, consulte Tipos CLR definidos pelo usuário.