
Tipos de datos definidos por el usuario con formato de tabla en SQL Server
Los tipos de datos definidos por el usuario son bastante útiles para estandarizar los tipos de datos en las tablas, estos son creados en base a los tipos de datos nativos de SQL Server (Ver Tipos de datos definidos por el usuario).
Un tipo de dato definido por el usuario que puede ser de bastante utilidad es el que se le da la estructura de una tabla. Puede permitir al ser usado dentro de un procedimiento almacenado (Ver Procedimientos Almacenados) para ingresar varios registros en una sola instrucción.
La forma de crear un tipo de datos definido por el usuario con formato de tabla es similar a la creación de una tabla, no se puede crear usando el asistente, no se puede modificar.
Instrucción: Create Type
Permite crear un tipo de dato definido por el usuario con formato de tabla.
Sintaxis
Create type [Esquema.]NombreTipoDatos As Table
(
Definición de la estructura (Ver Create Table)
)
Instrucción: Drop Type
Elimina un tipo de dato definido por el usuario.
Drop type [Esquema.]NombreTipoDatos
Usando Tipos de datos definidos por el usuario con formato de tabla
Para el ejemplo se creará una base de datos con una tabla de Personas.
Create database Tipos
go
Use Tipos
go
Crear la tabla Personas
Create Table Personas(
PersonasCodigo nchar(8) Not Null,
PersonasPaterno nvarchar(100) Not Null,
PersonasMaterno nvarchar(100) Not Null,
PersonasNombre nvarchar(100) Not Null,
PersonasFechaNacimiento Date
constraint PersonasPK Primary key (PersonasCodigo)
)
go
Crear el tipo de dato definido por el usuario con la misma estructura de la tabla
Create Type udtPersonasTipoTabla As Table
(
PersonasCodigo nchar(8) Not Null,
PersonasPaterno nvarchar(100) Not Null,
PersonasMaterno nvarchar(100) Not Null,
PersonasNombre nvarchar(100) Not Null,
PersonasFechaNacimiento Date
)
go
Para visualizar los tipos de datos definidos por el usuario
select * from sys.types where is_user_defined = 1
go

Uso del tipo de datos definido por el usuario tipo tabla
Podemos usar el tipo de dato desde SSMS con las siguientes instrucciones
Insertar varios registros en el tipo de dato
Declare @NuevasPersonas As udtPersonasTipoTabla
Insert @NuevasPersonas values
(‘TFR97089′,’Campos’,’Pereda’,’Carlos’,’21/11/1983′),
(‘TRG97098′,’Terranova’,’Chavez’,’Lizeth’,’12/06/1980′),
(‘FTG88699′,’Sandoval’,’Villacorta’,’Elena’,’16/08/1996′),
(‘DEF48885′,’Silva’,’Alvarado’,’Fernando’,’12/09/1990′),
(‘WSE59970′,’Sánchez’,’Vargas’,’Víctor’,’21/11/1966′)
Insert into Personas
select * from @NuevasPersonas
go
Visualizar el resultado en la tabla Personas
select * from Personas
go

Uso del UDT de tipo Tabla en un Procedimiento Almacenado
Crear un procedimiento almacenado que inserte datos a la tabla Personal usando el tipo de dato creado llamado udtPersonasTipoTabla.
En el procedimiento almacenado se usará en tipo de dato con formato de tabla, este debe crearse de tipo Solo Léctura.
Create procedure spPersonasInsertaMultiple
(@PersonasNuevas As udtPersonasTipoTabla READONLY)
AS
Begin
Set nocount on
Insert into Personas
(PersonasCodigo, PersonasPaterno, PersonasMaterno,
PersonasNombre, PersonasFechaNacimiento)
Select * from @PersonasNuevas
End
go
Ejecutar el SP, para esto debemos declarar una variable con el tipo de dato definido por el usuario con formato de tabla e insertar datos, luego enviar esa variable en la ejecución del SP.
Declare @NuevosRegistros as udtPersonasTipoTabla
Insert @NuevosRegistros values
(‘NJU47587′,’Saavedra’,’Ganoza’,’Sergio’,’13/02/1996′),
(‘NDE09803′,’Plasencia’,’Llanos’,’César’,’15/12/1997′),
(‘SCD48859′,’Carranza’,’Pérez’,’María Fernanda’,’01/10/1985′)
Execute spPersonasInsertaMultiple @NuevosRegistros
go
Ver los resultados con los registros insertados desde el SP
select * from Personas
go
