none
Validar existencia de registro y copia a tabla intermedia RRS feed

  • Pregunta

  • Estimados miembros del foro, deseo si podrían asistirme con el proceso a realizar para insertar un registro según se cumpla una condición de existencia. Trataré explicar lo más breve y claro.

    • Utilizo ASP y c# para conectar con mi base de datos.
    • Mi base de datos tiene tres tablas sobre las que quiero efectuar una relación de tipo N:M (varios a varios).

    • Tabla A: es mi tabla principal, que se relaciona con otras tablas con una relación de uno a muchos, y que para efectos de mi problema, no viene al caso detallar. La columna Folio es la clave primaria autoincremental.

    • Tabla B: guarda nombres de personas entre otra información relacionada. La columna Id_cCiudadano es la clave primaria autoincremental.

    Para crear la relación N:m, implementé la tabla c: contiene las columnas Id_Union INTEGER IDENTITY PRIMARY KEY, Id_Folio INTEGER, Id_Ciudadano INTEGER, Contador INTEGER. Id_Folio e Id_Ciudadano, son claves foráneas a tabla A y B respectivamente.

    Por lo anterior necesito:

    1 Al insertar un nuevo registro en tabla A y B, copiar sus claves primarias respectivas en la tabla C, para crear la relación N:M.

    2 no se permiten registros repetidos ni en A ni B. tomando como referencia únicamente tres campos importantes en dicha tablas. Si uno de esos campos no es idéntico, el registro se considera distinto y se permite insertar, a la vez que se alimenta la tabla C.

    Cabe mencionar que siempre se llenarán simultáneamente los formularios que alimentan a tabla A y B. pero según el resultado de la validación de existencia se tienen los siguientes casos:

    1. Si no existe un registro en A y B, ambos se guardan y se crea la relación en tabla C.
    2. Si el registro en A ya existe pero en B no, se insertará el nuevo registro en tabla B, a su vez que se copia la relación de A y B en C.
    3. Por su parte si el registro ya existe en tabla B, pero en A no, se insertará el registro A, a su vez que se crea la relación en C.
    4. Si ambos registros (A y B) ya existen, se buscará esa relación en tabla c y se aumentará el contador +1 en dicha tabla.

    Creo que suele ser una funcionalidad ya implementada en muchos sistemas, pero está claro que existe cierto grado de complejidad para realizar éstos procedimientos. Y más aún, cuando no se poseen conocimientos tan avanzados.

    Investigando encontré la instrucción EXISTS, pero profundizando me encontré la existencia de la instrucción MERGE, que según dicen es más eficiente a la hora de buscar registros a validar.

    Mucho agradezco a quien se tome el tiempo de leerme, y si tienen mínimo ayudarme con las sentencias a utilizar, o bien artículos o ejemplos al respecto.

    Háganme saber si falta más información, con gusto la incluyo.

    Un saludo para todos.

    martes, 10 de octubre de 2017 19:34

Respuestas

  • Hola.

    Si entendí bien, creo que con una combinación de las dos sentencias que propones, lo puedes lograr.

    Hay que generar un procedimiento almacenado que cumpla con los cuatro casos que especificas.

    La documentación de la sentencia MERGE seguro te ayudará a lograrlo.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    • Propuesto como respuesta Jorge TurradoMVP miércoles, 11 de octubre de 2017 12:34
    • Marcado como respuesta JCamaleon martes, 17 de octubre de 2017 14:47
    miércoles, 11 de octubre de 2017 12:14

Todas las respuestas

  • Hola.

    Si entendí bien, creo que con una combinación de las dos sentencias que propones, lo puedes lograr.

    Hay que generar un procedimiento almacenado que cumpla con los cuatro casos que especificas.

    La documentación de la sentencia MERGE seguro te ayudará a lograrlo.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    • Propuesto como respuesta Jorge TurradoMVP miércoles, 11 de octubre de 2017 12:34
    • Marcado como respuesta JCamaleon martes, 17 de octubre de 2017 14:47
    miércoles, 11 de octubre de 2017 12:14
  • Hola amigo, perdona el retardo.

    muchas gracias por tu ayuda!

    saludos

    martes, 17 de octubre de 2017 14:47
  • Hola amigo, disculpa que retome el tema.

    Analizando la documentación que me facilitaras, veo que en la sentencia USING se especifica el nombre de una tabla de origen. En mi caso, solo tengo una de destino, pues la fuente de datos es brindada por mi aplicación desde la que se envía los datos a validar existencia.

    Pregunto, sabes cómo podría indicar una fuente de datos que no sea una tabla¡

    Gracias a quien pueda asistirme.

    Saludos

    miércoles, 18 de octubre de 2017 14:00