SQL Server - Importacion Masiva de TXT

 
Vista:
sin imagen de perfil
Val: 55
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por ANTONIO (28 intervenciones) el 26/11/2021 09:38:52
Trabajo con Sql Server Management Studio v18.4

Quiero importar el contenido de una serie de TXT a una tabla de mi base de datos.
Previamente he importado a otra tabla temporal el nombre de los TXT que quiero tratar (ya que no quiero tratar los antiguos), mediante la siguiente instruccion :
CREATE TABLE #DirectoryTree (
id int IDENTITY(1,1)
,subdirectory nvarchar(512)
,depth int
,isfile bit);
INSERT #DirectoryTree (subdirectory,depth,isfile)
EXEC master.sys.xp_dirtree 'E:\isis\bd',1,1 ;

Como decía, despues hago otra serie de comprobaciones quedandome con otra temporal con los nombres de todos los TXT cuya información quiero importar a mi tabla de la Base de Datos.

Mi problema es cuando quiero hacer esa importación masiva. Entiendo que cuando es un único TXT no hay problema, como por ejemplo :
INSERT INTO #LecturaTxTs
SELECT * FROM OPENROWSET(
BULK 'E:\isis\bd\ejemplo.txt',
SINGLE_BLOB) AS x;

Pero si quiero traerme todos y no solo uno en concreto no se como proceder.
Aparte de que no se si hay alguna clausula del tipo WHERE para que me compare con mi tabla temporal para solo hacer la importación masiva de solo aquellos txt cuyo nombre me coincida con dicha tabla temporal que ya me creé.

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por Isaias (4558 intervenciones) el 26/11/2021 16:30:19
Primero, necesitas saber que version tienes de SQL Server, no del MANAGEMENT STUDIO, ¿como lo investigas?

Ejecuta:

1
SELECT @@Version

Comparte el resultado

Segundo, la instruccion que utilizas para subir informacion de forma masiva es antigua, cuando pienses en MOVER DATOS de un lugar a otro siempre utiliza SSIS (SQL Server Integration Services).

https://www.youtube.com/watch?v=R6dGKvKFtB0

https://www.sqlservercentral.com/articles/ssis-basics-bulk-import-various-text-files-into-a-table
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 55
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por ANTONIO (28 intervenciones) el 29/11/2021 08:12:37
Microsoft SQL Server 2019 (RTM-CU8-GDR) (KB4583459) - 15.0.4083.2 (X64) Nov 2 2020 18:35:09 Copyright (C) 2019 Microsoft Corporation Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)

Analizaré lo que me comentas de usar SSIS (SQL Server Integration Services). El problema es que tengo que hacer varios procedimientos ya que no lo puedo hacer de forma manual, sino que tengo que programar Jobs Trimestrales que me irán metiendo en una tabla los nuevos TXT. mI único problema es como Insertar una columna más con el nombre del TXT a la que ya obtengo con la información de dicho txt (@filename ). Te pongo mi script, que funciona, pero por separado. Como te digo solo me falta asociar esa parte porque la necesito tener enganchada.

IF OBJECT_ID('TEMPDB..#TEMP_FILES') IS NOT NULL DROP TABLE #TEMP_FILES
CREATE TABLE #TEMP_FILES
(
FileName VARCHAR(MAX),
DEPTH VARCHAR(MAX),
[FILE] VARCHAR(MAX)
)
INSERT INTO #TEMP_FILES EXEC master.dbo.xp_DirTree 'E:\isis\Originales\',1,1

Esto me arroja un resultado, ej :
FileName DEPTH FILE
20182130.TXT 1 1
20182242.TXT 1 1
20183130.TXT 1 1
Donde obtengo mi listado de TXT que en otro proceso anterior (por mis necesidades he metido en otra tabla en mi bb.dd)

Y por otra parte obtengo el contenido interno de estos TXT :

IF OBJECT_ID('TEMPDB..#TEMP_RESULTS') IS NOT NULL DROP TABLE #TMP
CREATE TABLE #TEMP_RESULTS
(
Contenido VARCHAR(MAX)
)
DECLARE @FILENAME VARCHAR(MAX),@SQL VARCHAR(MAX)
WHILE EXISTS(SELECT * FROM #TEMP_FILES)
BEGIN
SET @FILENAME = (SELECT TOP 1 FileName FROM #TEMP_FILES)
SET @SQL = 'BULK INSERT #TEMP_RESULTS
FROM ''E:\isis\Originales\' + @FILENAME +'''
WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'');'
PRINT @SQL
EXEC(@SQL)
DELETE FROM #TEMP_FILES WHERE FileName = @FILENAME
END

Extrayendomelo correctamente :
Contenido
280060001ALCOBENDAS 090180002ARANDA DE DUERO V
280060001ALCOBENDAS 091410001FUENTESPINA I
280060001ALCOBENDAS 091410001FUENTESPINA V

Pero como decía, necesito agregar una columna a #TEMP_RESULTS donde esté enganchado el nombre del TXT correspondiente a su contenido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por Isaias (4558 intervenciones) el 30/11/2021 00:06:33
Perdona que insista, pero cada que pienses en MOVER datos de un lugar a otro, piensa en SSIS, puedes crear un paqute y este, ejecutarlo desde el Agente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 55
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por ANTONIO (28 intervenciones) el 30/11/2021 08:44:08
Si, me lo estoy mirando, entiendo que se ejecuta desde Visual Studio. El problema es que en mi trabajo, esto lo llevaría otra persona. Yo no tengo acceso a la instalación de la herramienta, por eso me estoy volviendo loco intentando hacerlo mediante código
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por Isaias (4558 intervenciones) el 30/11/2021 16:07:45
No se ejecuta en VISUAL STUDIO, se ejecuta como un JOB en SQL Server, VS solo te sirve para crear tu proyecto y puedes hacerlo de forma local en tu laptop, una vez que tienes tu paquete probado, lo colocas en su servidor y lo ejecutas como un job
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 55
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por ANTONIO (28 intervenciones) el 02/12/2021 14:08:08
Trabajo directamente conectado con el Servidor desde mi Local, con lo cuál para mí sería muy rápido. Así que he pedido al personal de sistemas que me instalen el Paquete ya que todo tiene su protocolo. El tema es que mis jefes insistian en hacer todo el proceso de importación a base de código, cosa que estoy de acuerdo contigo me parece poco fiable. Me estudiaré como se hace el proceso del Bulk Insert desde SSIS, porque lo único que necesito como te decía es que con la información que trae internamente el .TXT me asocie en mi tabla de la Base de Datos el nombre del mismo. Es decir :
CAMPO1 CAMPO2
F0001.txt ---> Linea 1 Contenido
F0001.txt ---> Linea 2 Contenido
....etc
F0002.txt ---> Linea 1 Contenido
F0002.txt ---> Linea 2 Contenido
....etc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por Isaias (4558 intervenciones) el 04/12/2021 16:35:50
Bueno, como veo que es muy difícil de convencerte que uses la herramienta correcta SSIS, deseo que te vaya muy bien con BULK INSERT, que es una instrucción de la versión 2000, saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 55
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por ANTONIO (28 intervenciones) el 04/12/2021 17:45:55
No, no, lo mismo no me expliqué bien. Tu argumentación me pareció perfecta y fui yo quien tuve que convencer a mis jefes... Eso sí que me costó. Así que todo lo contrario te estoy muy agradecido de tu comentario.
Esta semana me instalaran en el paquete.
así que si no es molestia, si tengo alguna duda una vez que empieza a utilizarlo te consultaré.
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por Isaias (4558 intervenciones) el 06/12/2021 16:29:20
De nada, estaré al pendiente de cualquier ayuda que necesites, saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por Isaias (4558 intervenciones) el 06/12/2021 16:29:53
Recuerda que VS lo debes instalar solo en tu maquina LOCAL, no en el servidor donde reside SQL Server
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 55
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por ANTONIO (28 intervenciones) el 06/12/2021 17:15:22
Si, se lo comentaré a los técnicos.

Muchísimas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 55
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por ANTONIO (28 intervenciones) el 01/02/2022 14:58:54
Hola. Conseguí una prueba en mi local, primero con un solo archivo .txt y luego con varios, es decir, la carga masiva la efectua correctamente. Ahora mi siguiente paso, es que me asocie cada Nombre.txt con su contenido, bien en un campo nuevo o dentro de la información, eso es lo de menos. Pero no he conseguido ver esa opción, si es que la hay. Por ejemplo, ahora mismo tengo :

File Contenido Interno
A001.txt aaaaabbbbbccccc
A002.txt zzzzzzzzzzz
A003.txt jkjidijei

Tras crear el Bulk Insert solo puedo ver en mi tabla de insercion
aaaaabbbbbccccc
zzzzzzzzzzz
jkjidijei

pero querría algo así
A001.txt aaaaabbbbbccccc
A002.txt zzzzzzzzzzz
A003.txt jkjidijei

No se si se podrá, pero es en definitiva lo que necesito para poder asociar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Importacion Masiva de TXT

Publicado por Isaias (4558 intervenciones) el 01/02/2022 15:32:29
¿Como extraer el nombre del archivo que se esta procesando en SSIS?

https://www.timmitchell.net/post/2018/12/14/extract-the-file-name-in-ssis-data-flows-using-the-filenamecolumnname-property/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar