none
Store Procedure webform RRS feed

  • Pregunta

  • Saludos

    Muchachos podrían por favor orientarme sobre si para lo siguiente que voy a realizar necesito un store procedure

    cuando valla a insertar los registro en la base de datos no quiero que un campo se repita por ejemplo el campo nombre de la empresa debe ser único,

    pregunto:

    entonces para que me diga que el registro existe debo hacer un store procedure aparte, o el store procedure debe contener  tanto el código de revisar el registro y la inserción de los registro en caso que el registro no exista.

    podrían por favor decirme cual de estas dos opciones es la correcta, como debo hacerlo.

    Yo se que siempre contare con su mejor respuesta

    Gracias.

    viernes, 12 de abril de 2019 11:02

Respuestas

  • Hola agustin173:

    Puedes aplicar una restricción de unicidad sobre el campo, y en el stored procedure donde haces la inserción te retornará el error de registro ya existente.

    https://docs.microsoft.com/es-es/sql/relational-databases/tables/create-unique-constraints?view=sql-server-2017

    Espero te ayude

    viernes, 12 de abril de 2019 12:20
  • No hay necesidad de usar un Stored Procedure para esto. Puedes perfectamente logralo con una sentencia ad-hoc enviada desde el codigo asp.net.

    Una primera opcion, si no preves que normalmente se vayan a duplicar los nombres y solo va a ocurrir en casos excepcionales, es simplemente agregar un indice de tipo UNIQUE sobre el campo que no se puede repetir. A la hora de grabar, usas un try...catch alrededor de la sentencia de grabacion y el catch te detecta el error automaticamente en caso de intentar grabar un dupicado.

    Si el intento de grabar duplicados va a ser frecuente, etntonces no es conveniente delegar en el try...catch la captura del error (aunque si es conveniente agregar el UNIQUE). En este caso, puedes simplemente enviar una sentencia del tipo "If not exists (select * from laTabla where nombre=...) Insert into laTabla(...) values(...)". Es decir, simplemente antepones un IF a la sentencia de grabacion. Desde el codigo llamante puedes saber si grabo o no grabo examinando el valor de RowsAffected que te devuelve el ExecuteNonQuery.

    viernes, 12 de abril de 2019 12:25

Todas las respuestas

  • Hola agustin173:

    Puedes aplicar una restricción de unicidad sobre el campo, y en el stored procedure donde haces la inserción te retornará el error de registro ya existente.

    https://docs.microsoft.com/es-es/sql/relational-databases/tables/create-unique-constraints?view=sql-server-2017

    Espero te ayude

    viernes, 12 de abril de 2019 12:20
  • No hay necesidad de usar un Stored Procedure para esto. Puedes perfectamente logralo con una sentencia ad-hoc enviada desde el codigo asp.net.

    Una primera opcion, si no preves que normalmente se vayan a duplicar los nombres y solo va a ocurrir en casos excepcionales, es simplemente agregar un indice de tipo UNIQUE sobre el campo que no se puede repetir. A la hora de grabar, usas un try...catch alrededor de la sentencia de grabacion y el catch te detecta el error automaticamente en caso de intentar grabar un dupicado.

    Si el intento de grabar duplicados va a ser frecuente, etntonces no es conveniente delegar en el try...catch la captura del error (aunque si es conveniente agregar el UNIQUE). En este caso, puedes simplemente enviar una sentencia del tipo "If not exists (select * from laTabla where nombre=...) Insert into laTabla(...) values(...)". Es decir, simplemente antepones un IF a la sentencia de grabacion. Desde el codigo llamante puedes saber si grabo o no grabo examinando el valor de RowsAffected que te devuelve el ExecuteNonQuery.

    viernes, 12 de abril de 2019 12:25
  • Gracias por su respuesta
    lunes, 22 de abril de 2019 10:27