Insertar varios registros a la vez SQL Server

Insertar varios registros a la vez SQL Server

En algunas aplicaciones es necesario insertar varios registros en una misma instrucción, puede ser por ejemplo el detalle de una pedido, el detalle de un documento de venta, los integrantes de un grupo de trabajo, etc.
En este artículo se explica como insertar varios registros a la vez usando un procedimiento almacenado y un tipo de dato definido por el usuario con formato tipo tabla.

Para mas información ver:

Procedimientos Almacenados
Tipo de datos definidos por el usuario
Tipos de datos definidos por el usuario con formato de tabla
Variables en SQL Server

Ejercicio

Para el ejemplo a realizar se va a crear una base de datos, luego una tabla y usando un procedimiento almacenado se va a agregar en una sola instrucción varios registros a la vez.

Create database ProcesosSATT
go
use ProcesosSATT
go

Crear una tabla Contribuyente para insertarle datos

Create table Contribuyente
(
ContribuyenteCodigo nchar(8),
ContribuyentePaterno nvarchar(80) NOT NULL,
ContribuyenteMaterno nvarchar(80) NOT NULL,
ContribuyenteNombres nvarchar(100) NOT NULL
constraint ContribuyentePK Primary key (ContribuyenteCodigo)
)
go

Crear un tipo de dato con formato de tabla con los mismos campos que la tabla Contribuyente

Create type TipoDatoContribuyente As Table
(
ContribuyenteCodigo nchar(8),
ContribuyentePaterno nvarchar(80) ,
ContribuyenteMaterno nvarchar(80) ,
ContribuyenteNombres nvarchar(100)
)
go

Crear un procedimiento que inserte datos a la tabla basado sobre el tipo de dato creado

Create procedure spContribuyenteInsertarGrupo
(@Contribuyentes As TipoDatoContribuyente READONLY)
As
Set nocount on
Insert Into Contribuyente
(ContribuyenteCodigo, ContribuyentePaterno ,
ContribuyenteMaterno, ContribuyenteNombres)
SELECT C.ContribuyenteCodigo, C.ContribuyentePaterno,
C.ContribuyenteMaterno, C.ContribuyenteNombres
FROM @Contribuyentes as C
go

Note que el parámetro con el tipo de dato definido por el usuario con formato tipo tabla debe ser de sólo lectura.

Para insertar los datos usando el procedimiento, desde SQL Server Management Studio se crea una variable con el tipo de dato definido por el usuario con formato de tabla llamado TipoDatoContribuyente, luego a la variable creada se le inserta registros y se ejecuta el procedimiento almacenado.

Declare @Datos As TipoDatoContribuyente
INSERT @Datos
VALUES (‘00070099′,’Chávez’,’Albuquerque’,’Mario’),
(‘00070198′,’Luque’,’Sánchez’,’Fernando’),
(‘00072528′,’Montero’,’Paredes’,’Cecilia’),
(‘00073698′,’Alvarado’,’Mantilla’,’Aracely’),
(‘00072207′,’Villacorta’,’Acosta’,’Carolina’)
EXEC spContribuyenteInsertarGrupo @Contribuyentes = @Datos
go

Para visualizar los registros insertados

select * from Contribuyente
go

La imagen muestra los registros insertados.