Exportar (0) Imprimir
Expandir todo
Expandir Minimizar

CREATE TYPE (Transact-SQL)

Actualizado: 14 de abril de 2006

Crea un tipo de datos de alias o un tipo definido por el usuario en una instancia de SQL Server 2005. La implementación de un tipo de datos de alias se basa en un tipo nativo del sistema de SQL Server. Un tipo definido por el usuario se implementa a través de una clase de un ensamblado de Common Language Runtime (CLR) de Microsoft .NET Framework. Para que SQL Server 2005 enlace un tipo definido por el usuario a su implementación, el ensamblado CLR que contiene la implementación del tipo debe registrarse primero en SQL Server mediante CREATE ASSEMBLY.

ms175007.note(es-es,SQL.90).gifNota:
De manera predeterminada, la posibilidad de ejecutar código de CLR está desactivada en SQL Server. Se pueden crear, modificar y quitar objetos de base de datos que hagan referencia a módulos de código administrado, pero estas referencias no se ejecutarán en SQL Server a menos que se habilite la opción clr enabled mediante sp_configure.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL


CREATE TYPE [ schema_name. ] type_name
{ 
    FROM base_type 
    [ ( precision [ , scale ] )  ]
    [ NULL | NOT NULL ] 
  | EXTERNAL NAME assembly_name [ .class_name ] 
} [ ; ]

schema_name

Es el nombre del esquema al que pertenece el tipo de datos de alias o el tipo definido por el usuario.

type_name

Es el nombre del tipo de datos de alias o del tipo definido por el usuario. Los nombres de tipos deben cumplir las reglas de los identificadores.

base_type

Es el tipo de datos suministrado por SQL Server en el que se basa el tipo de datos de alias. base_type es de tipo sysname, no tiene ningún valor predeterminado y puede tener uno de los valores siguientes:

bigint

binary(n)

bit

char(n)

datetime

decimal

float

image

int

money

nchar(n)

ntext

numeric

nvarchar(n | max)

real

smalldatetime

smallint

smallmoney

sql_variant

text

tinyint

uniqueidentifier

varbinary(n | max)

varchar(n | max)

base_type también puede ser cualquier sinónimo de tipo de datos que esté asignado a uno de estos tipos de datos del sistema.

precision

Para decimal o numeric, es un entero no negativo que indica el número máximo de dígitos decimales que se pueden almacenar en total, a ambos lados del separador decimal. Para obtener más información, vea decimal y numeric (Transact-SQL).

scale

Para decimal o numeric, es un entero no negativo que indica el número máximo de dígitos decimales que se pueden almacenar a la derecha del separador decimal, y debe ser menor o igual que el valor de precisión. Para obtener más información, vea decimal y numeric (Transact-SQL).

NULL | NOT NULL

Especifica si el tipo puede contener un valor NULL. Si no se especifica, el valor predeterminado es NULL.

assembly_name

Especifica el ensamblado de SQL Server que hace referencia a la implementación del tipo definido por el usuario en Common Language Runtime. assembly_name debe coincidir con un ensamblado existente en SQL Server en la base de datos actual.

[ .class_name ]

Especifica la clase en el ensamblado que implementa el tipo definido por el usuario. class_name debe ser un identificador válido y debe existir en el ensamblado como clase con visibilidad de ensamblado. class_name distingue entre mayúsculas y minúsculas, independientemente de la intercalación de base de datos, y debe coincidir exactamente con el nombre de la clase del ensamblado correspondiente. El nombre de la clase puede ser un nombre que incluya el espacio de nombres entre corchetes ([ ]) si el lenguaje de programación que se utiliza para escribir la clase utiliza el concepto de espacios de nombres, como es el caso de C#. Si no se especifica class_name, SQL Server considera que es el mismo que type_name.

Cuando se usa CREATE TYPE para crear un tipo definido por el usuario CLR, la compatibilidad con la base de datos debe ser 90.

La clase del ensamblado a la que se hace referencia en assembly_name, junto con sus métodos, debe cumplir todos los requisitos para implementar un tipo definido por el usuario en SQL Server. Para obtener más información acerca de estos requisitos, vea CLR User-Defined Types.

Existen algunas consideraciones adicionales, entre las que se pueden citar las siguientes:

  • La clase puede tener métodos sobrecargados, pero éstos sólo se pueden llamar desde el código administrado, no desde Transact-SQL.
  • Los miembros estáticos se deben declarar como const o readonly si assembly_name es SAFE o EXTERNAL_ACCESS.

Dentro de una base de datos sólo puede haber un tipo definido por el usuario registrado con cualquier tipo especificado que se haya cargado en SQL Server desde CLR. Si se crea un tipo definido por el usuario a partir de un tipo de CLR para el que ya existe un tipo definido por el usuario en la base de datos, CREATE TYPE genera un error. Esta restricción es necesaria para evitar la ambigüedad durante la resolución de tipos SQL si un tipo CLR se puede asignar a más de un tipo definido por el usuario.

Si un método mutador del tipo no devuelve void, la instrucción CREATE TYPE no se ejecuta.

Para modificar un tipo definido por el usuario, debe volver a crearlo después de haberlo quitado mediante una instrucción DROP TYPE.

A diferencia de los tipos definidos por el usuario creados mediante sp_addtype, la función de base de datos public no recibe automáticamente el permiso REFERENCES para los tipos creados mediante CREATE TYPE. Este permiso debe concederse por separado.

Requiere el permiso CREATE TYPE en la base de datos actual y el permiso ALTER en schema_name. Si no se especifica schema_name, se aplican las reglas de resolución de nombres predeterminadas para determinar el esquema del usuario actual. Si se especifica assembly_name, el usuario debe ser propietario del ensamblado o tener el permiso REFERENCES en él.

A. Crear un tipo de alias basado en el tipo de datos varchar

En el ejemplo siguiente se crea un tipo de alias basado en el tipo de datos varchar suministrado por el sistema.

CREATE TYPE SSN
FROM varchar(11) NOT NULL ;

B. Crear un tipo definido por el usuario

En el ejemplo siguiente se crea un tipo Utf8String que hace referencia a la clase utf8string del ensamblado utf8string. Antes de crear el tipo, se registra el ensamblado utf8string en la base de datos local.

CREATE ASSEMBLY utf8string
FROM '\\ComputerName\utf8string\utf8string.dll' ;
GO
CREATE TYPE Utf8String 
EXTERNAL NAME utf8string.[Microsoft.Samples.SqlServer.utf8string] ;
GO

Versión Historial

14 de abril de 2006

Contenido nuevo:
  • En la sección Notas se agregó información que indica que cuando se usa CREATE TYPE para crear un tipo definido por el usuario CLR, la compatibilidad con la base de datos debe ser 90.
  • En la sección Argumentos de [ .class_name ], se agregó que si no se especifica class_name, SQL Server considera que es el mismo que type_name.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft