Tipos definidos por el usuario con formato de tabla

Como crear Tipos de datos definidos por el usuario con formato de tabla

Insertar varios registros a la vez

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 (Ver Crear Tablas),  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.

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

Ejemplo

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

Como insertar varios registros en SQL Server

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

Como usar un 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