SQL - merge por lotes

 
Vista:

merge por lotes

Publicado por Nico (2 intervenciones) el 19/05/2020 17:47:46
Buenas,

Mi problema: tengo un merge entre dos tablas gigantes, para insertar registros de una hacia la otra. Cuando lo ejecuto tengo el problema de espacio "The transaction log for database is full".

¿Cómo puedo hacer el merge por lotes?

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: 2.019
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

merge por lotes

Publicado por Isaias (1500 intervenciones) el 20/05/2020 16:56:42
No nos muestras tu query, pero supongo que deberias agregar un WHERE (Filtro).
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

merge por lotes

Publicado por Nico (2 intervenciones) el 22/05/2020 21:38:37
Hola, es un merge que inserta registros de una tabla a otra. Tengo que encontrar la fomra de que la insercion se haga por lotes, de por ejemplo 20.000 registros

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
MERGE tablas_1 as target
    USING tabla_2 as source
    ON
	(target.TipoKPI = source.TipoKPI AND
	target.BASE = source.BASE AND
	target.nombre_tabla = source.nombre_tabla AND
	target.nombre_atributo = source.nombre_atributo AND
	target.mes_control = source.mes_control AND
	target.Completitud = source.Completitud AND
	target.conformidad = source.conformidad AND
	target.validez = source.validez AND
	target.exactitud = source.exactitud)
 
   WHEN NOT MATCHED THEN
     INSERT
	(TipoKPI,
	BASE,
	nombre_tabla,
	nombre_atributo,
	mes_control,
	Completitud,
	conformidad,
	validez,
	exactitud)
	VALUES
	(source.TipoKPI,
	source.BASE,
	source.nombre_tabla,
	source.nombre_atributo,
	source.mes_control,
	source.Completitud,
	source.conformidad,
	source.validez,
	source.exactitud);

Muchas gracias por su tiempo.
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 Vega
Val: 178
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

merge por lotes

Publicado por Vega (68 intervenciones) el 23/05/2020 13:23:21
Se puede conseguir introduciendo un WHILE or un cursor... quizás usando nombre_tabla como iterador?
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 Vega
Val: 178
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

merge por lotes

Publicado por Vega (68 intervenciones) el 23/05/2020 13:18:07
Hola Nico,
No sé que motor estás usando pero ¿has probado "Trace Flag 610"?
https://docs.microsoft.com/es-es/previous-versions/sql/sql-server-2008/dd425070(v=sql.100)?redirectedfrom=MSDN

sirve para 2008 y superior.
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