Procedimiento Almacenado para Insert Masivos en Sql Server

Para lograr realizar insert masivos lo que les enseñare en esta oportunidad es crear una estructura de datos que podrá ser utilizada en nuestros Procedimientos almacenados.

El ejemplo será realizado en el supuesto de la tabla persona

CREATE TABLE [dbo].[persona](
    [nombre] [varchar](255) NOT NULL,
    [apellido] [varchar](255) NOT NULL
) ON [PRIMARY]

Lo primero será crear nuestra estructura, lo cual deben conocer como TYPE

CREATE TYPE [dbo].[Persona] AS TABLE(
        [Nombre] [varchar](255) NULL,
        [Apellido] [varchar](255) NULL
)

Esta estructura deberá ser similar a la tabla donde insertaremos los registros

Una vez echo esto procedemos a crear nuestro Procedimiento Almacenado utilizando esta estructura.

CREATE PROCEDURE [dbo].[SpInsertWithTypeTable] --Inicio Procedimiento Almacenado
    @Personas AS dbo.Persona READONLY --Recibe una tabla con la estructura definida 
AS
BEGIN
    SET NOCOUNT ON;
    INSERT INTO Persona (nombre,apellido) -- Tabla original 
    SELECT p.Nombre, p.Apellido -- Campos de la tabla enviada
    FROM @Personas p; -- tabla enviada

   SELECT @@ROWCOUNT; --Devuelve la cantidad de Filas Afectadas
END    

Este tipo de procedimientos se utilizan para cargas desde lenguajes externos como c Sharp en donde le pasamos un DataTable con la misma estructura.

Si lo queremos usar directo desde sql server deberíamos llenar la tabla creada y enviarla

DECLARE @p as dbo.Persona
INSERT @p
VALUES ('Victor', 'Riquelme')
      , ('Jose', 'Pulgar')
      , ('Felipe', 'Loyola');

DECLARE @return_value int

EXEC    @return_value = [dbo].[SpInsertWithTypeTable]
        @Personas = @p

SELECT  'Return Value' = @return_value

GO

Espero sea de su utilidad

Saludos

También te podría gustar...

1 respuesta

  1. OSCAR VASQUEZ dice:

    y como ejecuto ese procedimiento almacenado o como le paso el parametro desde sql por ejemplo con «EXECUTE SpInsertWithTypeTable xxxxx»…

Deja una respuesta

Tu dirección de correo electrónico no será publicada.