Procedimiento para importar CSV directamente

Hoy me he marcado un procedimiento para importar directamente un CSV.

create procedure [dbo].[actualizaStock]
@fichero varchar(500),
@resultado int out
as

BEGIN TRANSACTION;
BEGIN TRY

-- si existe la tabla donde haremos la importación, la vaciamos, sino la creamos
if exists (select * from sys.tables where name = 'tmp_stock') 
	truncate table tmp_stock
else
	CREATE TABLE dbo.tmp_stock(
		codproducto varchar(15) NULL,
		talla varchar(5) NULL,
		unidades int NULL
	) ON [PRIMARY]

-- Importamos el fichero, especificando los delimitadores de columna y de fila. 
-- Se hace con un execute porque al hacer una importación con BULK no podemos poner la ruta como una variable  
execute ('BULK INSERT dbo.tmp_stock FROM ''' + @fichero + ''' WITH (FIRSTROW = 2, FIELDTERMINATOR = '';'', ROWTERMINATOR = ''\n'')');


-- en este caso actualizamos un stock con los datos que acabamos de importar 
update s
set s.stock = s.stock + t.unidades
from stock s inner join tmp_stock t on t.codproducto = s.CodProducto and s.Talla = t.talla

-- vamos a guardar los datos importados en una nueva tabla con la fecha del día
declare @tabla varchar(50)
set @tabla = 'tmp_stock_' + convert(varchar(8), getdate(), 112);

-- si ya existe una tabla con el nuevo nombre, la eliminamos
if exists (select * from sys.tables where name = @tabla) 
	execute ('drop table ' + @tabla);

-- renombramos la tabla que hemos usado para la importación con el nuevo nombre 
exec sp_RENAME 'tmp_stock' , @tabla	


END TRY
BEGIN CATCH    
    IF @@TRANCOUNT > 0
		begin
			set @resultado = -1
			ROLLBACK TRANSACTION;
			return -1
		end
END CATCH;

IF @@TRANCOUNT > 0
	begin
		set @resultado = 0
		COMMIT TRANSACTION;
		return 0
	end
Dejar un comentario?

0 Comentarios.

Deje un comentario


NOTA - Puede usar estosHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.