[ Foro de SQL (y MySQL) ]

Bulk Insert

04-Feb-2022 13:56
Invitado (Antonio)
0 Respuestas

Tengo una consulta que rescata la información por un lado de los Nombres de Ficheros Txt que tengo en una carpeta contenedora

Por otro lado el bulk insert que extrae la información de cada uno de estos.

Independientemente tengo los resultados. Pero en una Tabla Final necesitaría tener el nombre de mi txt asociado a su contenido.

Algo así como

Campo 1     Campo 2

A1.TXT       Contenido Registro1

A1.TXT       Contenido Registro2

A1.TXT       Contenido Registro3

A2.TXT       Contenido Registro1

A2.TXT       Contenido Registro2

A2.TXT       Contenido Registro3

Mi codigo actual es el siguiente :

-- Tabla temporal con Nombre de los distintos txt
IF OBJECT_ID('tempdb..#DirectoryTree')IS NOT NULL
     DROP TABLE #TEMP_FILES;
CREATE TABLE #TEMP_FILES (
      id int IDENTITY(1,1)
     ,subdirectory nvarchar(512)
     ,depth int
     ,isfile bit);
INSERT #TEMP_FILES (subdirectory,depth,isfile)
EXEC master.sys.xp_dirtree 'E:\isis\Originales',1,1 -- PARA MIS PRUEBAS DE MOMENTO APUNTO AHI - CAMBIAR POR E:\isis\Originales
;

-- Tabla temporal (con un bulk insert) con el contenido de x registros por cada txt
IF OBJECT_ID('TEMPDB..#TEMP_RESULTS') IS NOT NULL DROP TABLE #TMP
CREATE TABLE #TEMP_RESULTS
(
Contenido1 VARCHAR(MAX)

)
DECLARE
@FILENAME VARCHAR(MAX),
@SQL VARCHAR(MAX)

WHILE EXISTS(SELECT * FROM #TEMP_FILES)
BEGIN
  SET @FILENAME = (SELECT TOP 1 subdirectory FROM #TEMP_FILES )
  SET @SQL = 'BULK INSERT  #TEMP_RESULTS
  FROM ''E:\isis\Originales\' + @FILENAME +' ''
  WITH (FIRSTROW = 1, FIELDTERMINATOR = ''\t'', ROWTERMINATOR = ''\n'');'
  PRINT @SQL
  EXEC(@SQL)

  DELETE FROM #TEMP_FILES WHERE subdirectory = @FILENAME
 
END




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)