Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Carga masiva con UniqueIdentifier

Estas en el tema de Carga masiva con UniqueIdentifier en el foro de SQL Server en Foros del Web. Al grano... Tengo una duda: Necesito importar un archivo de excel a una tabla en SQL Server, pero con las siguientes características en el archivo ...
  #1 (permalink)  
Antiguo 25/06/2015, 15:21
 
Fecha de Ingreso: junio-2015
Ubicación: Bogota
Mensajes: 18
Antigüedad: 9 años, 4 meses
Puntos: 0
Pregunta Carga masiva con UniqueIdentifier

Al grano... Tengo una duda: Necesito importar un archivo de excel a una tabla en SQL Server, pero con las siguientes características

en el archivo excel hay cuatro columnas (nombre, de tipo texto; tipo, de tipo texto; numero de tipo entero; y superior, de tipo texto y con referencia al campo nombre)

en la tabla debe haber cinco campos: un id, de tipo unique identifier; nombre, de tipo nvarchar(256); tipo, de tipo nvarchar(256); numero, de tipo int; y superior, de tipo unique identifier que ira relacionado con el campo ID de la misma tabla (relacion recurrente)

En la insercion hay dos tipos (campo 3) que tienen el superior y el id iguales. Por eso la inserción debe hacerse registro a registro, (o al menos eso es lo que me ha frenado)

Ahora... la pregunta es... Muchos dicen que es un error usar cursores y esa es la unica que se me ocurre... ¿alguna otra manera de hacerlo?
  #2 (permalink)  
Antiguo 25/06/2015, 16:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Carga masiva con UniqueIdentifier

Sencillo, haces un bulk insert de tu archivo de excel o una importacion de excel a una tabla de sql server que sea una tabla de transicion, despues esos datos los mueves a tu tabla Principal, tomando en cuenta las consideraciones que necesites y ya en un tabla principal ya puedes tener tus identificadores, y la tabla de transicion la puedes borrar y volver a usar para futuras cargas :), para eso no necesitas un cursor ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 26/06/2015, 09:02
 
Fecha de Ingreso: junio-2015
Ubicación: Bogota
Mensajes: 18
Antigüedad: 9 años, 4 meses
Puntos: 0
Carga masiva con UniqueIdentifier

Hombre me has dado una luz pero aun sigue quedándome un problema. Al hacer el bulk insert en la tabla de transición (sería una tabla temporal que se generaría cada que la aplicación web consuma el PA y al final se destruiría) tengo íntegros los datos del archivo excel. El problema es en la referencia del superior... debe ser una referencia integra a el campo ID (Una relación recurrente o cíclica o interna, y con integridad referencial) y la estructura en la tabla es fácil: No se como esta organizada Guadalajara, pero voy a asumir que es una ciudad con zonas y las zonas tienen barrios o vecindarios, y también pertenece a un estado. entonces por ejemplo en la base de datos habrá un registro que en el campo de ID tenga, digamos, el valor "1", en el campo nombre "Jalisco", en el tipo "Estado", y en el superior "1"(el mismo estado de Jalisco). Ahora hay otro registro con el ID 2, nombre "Guadalajara", tipo "Ciudad", superior 1 (el superior seria el estado de Jalisco)

Es decir, el campo Superior no lleva un texto, sino una referencia, que aunque se repite no siempre es la misma, así que la inserción en la tabla definitiva la debo hacer registro a registro. Como puedo hacer una inserción de ese tipo (uno a uno), sin usar un cursor?
  #4 (permalink)  
Antiguo 26/06/2015, 12:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Carga masiva con UniqueIdentifier

Podrias hacerlo con una funcion recursiva pero creo que seria mucho rollo, lo que te recomendaria para no usar un cursor es usar un ciclo while y recorrer tu tabla registro por registro :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 26/06/2015, 13:16
 
Fecha de Ingreso: junio-2015
Ubicación: Bogota
Mensajes: 18
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Carga masiva con UniqueIdentifier

Lo del ciclo while es mas sencillo en términos de codificación... Si hay que aceptarlo... voy a intentar y cuento que pasa. Una última pregunta... Cual seria la diferencia? Digo, entre usar un cursor que recorre una consulta registro a registro y un ciclo que recorra una tabla registro a registro?
  #6 (permalink)  
Antiguo 26/06/2015, 13:30
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Carga masiva con UniqueIdentifier

Un cursor consume mucho mas recursos que recorrer la tabla con un while simple, por eso es que no se recomienda mucho el uso de cursores, pero de igual manera un while que recorre un millon de registros uno por uno puede causar mal performance en el servidor.
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 28/06/2015, 13:10
 
Fecha de Ingreso: junio-2015
Ubicación: Bogota
Mensajes: 18
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Carga masiva con UniqueIdentifier

Pues esta consulta es de aproximadamente 10000 actualizaciones en bloque una sola vez... Las demás actualizaciones e inserciones son uno a uno. Sin embargo como es migrar una estructura de base de datos a otra el proceso se ha de repetir otras... Digamos... 25 veces... Pero el argumento del consumo me deja más tranquilo. Muchas gracias Libras!!
  #8 (permalink)  
Antiguo 29/06/2015, 10:54
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Carga masiva con UniqueIdentifier

Un comentario, que tal vez ayuda, SEPOMEX, en su pagina oficial, tiene la base de todos los estados, colonias, municipios, etc.

Tal vez si la bajas y la implementas en tu sistema, te evitarías muchos problemas.
__________________
MCTS Isaias Islas
  #9 (permalink)  
Antiguo 30/06/2015, 09:48
 
Fecha de Ingreso: junio-2015
Ubicación: Bogota
Mensajes: 18
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Carga masiva con UniqueIdentifier

Muy buena la información... pero lo de el ejemplo de Guadalajara era solo por mostrar como iba la relación... El aplicativo que estoy implementando es para Colombia.
  #10 (permalink)  
Antiguo 30/06/2015, 09:49
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Carga masiva con UniqueIdentifier

No bueno, entonces en COLOMBIA, también el servicio postal, estoy seguro proporciona la información de sus CODIGOS POSTALES, como ya se hace en muchos países.
__________________
MCTS Isaias Islas
  #11 (permalink)  
Antiguo 30/06/2015, 10:17
 
Fecha de Ingreso: junio-2015
Ubicación: Bogota
Mensajes: 18
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Carga masiva con UniqueIdentifier

El servicio postal solo me da la informacion del distrito, y de municipios... para mis efectos la necesito en dos niveles: 1- el distrito, las localidades, las upz's los barrios y las comunidades barriales, y 2- departamento, municipio, veredas, y comunidades veredales. Por eso es que he de armar la base que se requiere yo mismo.

Etiquetas: procedimiento_almacenado, relacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:38.