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
y como ejecuto ese procedimiento almacenado o como le paso el parametro desde sql por ejemplo con «EXECUTE SpInsertWithTypeTable xxxxx»…