Realizar operaciones en tipos definidos por el usuario

Puede realizar diversas operaciones en instancias de tipos definidos por el usuario. Entre ellas figuran las siguientes:

  • Invocar métodos o recuperar propiedades de un tipo definido por el usuario.

  • Realizar conversiones de tipos de datos.

  • Devolver valores de tipos definidos por el usuario a un cliente SQL.

  • Utilizar cláusulas ORDER BY.

  • Crear índices en columnas de tipos definidos por el usuario.

  • Crear columnas calculadas.

Invocar métodos o recuperar propiedades de tipos definidos por el usuario

Puede invocar un método o recuperar una propiedad de un tipo definido por el usuario en cualquier lugar donde pueda aparecer una expresión escalar. Debe disponer del permiso EXECUTE en el tipo. Los métodos que cambian el estado de los datos fuera de una instrucción UPDATE se ejecutarán, pero los cambios se pasarán por alto porque los métodos que cambian no están permitidos en las consultas.

En las cadenas devueltas por métodos de tipos definidos por el usuario se supone la intercalación de la base de datos en la que se creó el tipo definido por el usuario, con independencia de la base de datos actual.

Nota de advertenciaAdvertencia

Los métodos y las propiedades que se utilizan en las instrucciones SELECT no pueden producir efectos secundarios. Si un método utilizado en una instrucción SELECT produce efectos secundarios, los resultados no serán deterministas.

Nota de advertenciaAdvertencia

Cuando las invocaciones de métodos o propiedades tienen lugar en tipos definidos por el usuario sobre los que se crean columnas calculadas y la invocación se produce en el contexto de una operación en la columna calculada, los permisos EXECUTE en el tipo no se comprueban. En cambio, los permisos se comprueban cuando se crea la columna calculada.

Para invocar un método o recuperar una propiedad de un tipo definido por el usuario

[!NOTA]

SQL Server Management Studio devuelve los valores de los tipos definidos por el usuario en representación binaria. Para devolver valores de tipos definidos por el usuario en formato de cadena o XML, utilice CAST o CONVERT.

Realizar conversiones de tipos de datos con tipos definidos por el usuario

Puede realizar la conversión implícita y explícita con tipos definidos por el usuario tal y como se resume en la siguiente tabla.

 

A:

Tipo definido por el usuario

Binario

nvarchar

xml

DE:

Tipo definido por el usuario

 

Explícito

Explícito

Implícito

Binario

Implícito

 

 

 

nvarchar

Implícito

 

 

 

xml

Implícito

 

 

 

En el siguiente ejemplo se convierte explícitamente una instancia de un tipo definido por el usuario ComplexNumber a xml y se invoca una expresión XQuery sobre él.

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

En este ejemplo se convierten implícitamente los datos xml a una instancia de tipo definido por el usuario 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 obtener más información, vea CAST y CONVERT (Transact-SQL).

Devolver valores de tipos definidos por el usuario a un cliente SQL

Cuando una columna o expresión de un tipo definido por el usuario se devuelve a un cliente SQL como resultado de una instrucción SELECT o FETCH, la forma en que la API cliente tiene acceso a la columna depende de si la API cliente es administrada (ADO.NET) o no administrada (ODBC u OLE DB). Si el cliente utiliza ADO.NET, puede recuperar una instancia del tipo como un valor binario mediante el método GetValue en la clase SqlDataReader o bien como un objeto. Si el cliente utiliza OLE DB, recibirá los valores de tipos definidos por el usuario como un valor binario. Si el cliente utiliza ODBC, recibirá el valor de tipo definido por el usuario sólo como un valor binario.

Utilizar las cláusulas ORDER BY, GROUP BY y PARTITION BY con tipos definidos por el usuario

Puede realizar operaciones ORDER BY, GROUP BY y PARTITION BY con tipos definidos por el usuario si el tipo admite la ordenación binaria. Un tipo se ordena de forma binaria si tiene el indicador IsByteOrdered establecido en True en el atributo SqlUserDefinedType que se especifica como parte de la definición del tipo. Este indicador denota que la representación binaria del tipo se encuentra en el orden correcto semánticamente para dicho tipo.

Crear índices en columnas de tipos definidos por el usuario

Puede crear índices en columnas de tipos definidos por el usuario si el tipo admite la ordenación binaria. También puede crear índices en columnas calculadas que se definen como llamadas de métodos fuera de la columna de tipo definido por el usuario, siempre que los métodos se marquen como deterministas. Para obtener más información, vea Tipos definidos por el usuario de CLR.