none
COLUMNA AUTOINCREMENTADA RRS feed

  • Pregunta

  • Hola, buenas tardes.

    No sé si es posible, quisiera que una columna se autoincrementase con diferentes series en base a claves externas.

    Por ejemplo: una columna autoincrementada de un hospital cuando ingresamos nuevo personal incrementa el último valor + 1, quisiera que se incrementase en función del tipo de personal que ingresa, médicos, enfermeras, administración, etc., o sea si ingresa un médico el incremento sería partiendo del último médico que ingresó de la serie de médicos.

    Gracias y saludos.

    domingo, 4 de septiembre de 2016 17:21

Respuestas

  • Ángelroso

    --Yo lo que pretendo es que el incremento lo haga en base a la clave externa de código de provincia ( si en Álava había 700, ahora el campo de identidad ahora sería 701).

    Las columnas de identidad no actúan en función de otra columna, el desarrollador sólo puede intervenir en el valor de inicio y el valor de incremento. Luego los valores los genera el motor de la base de datos cuando se agrega un nuevo registro. Ese valor no se podrá modificar en ningún momento.

    Ahora, si usted tiene dos tablas relacionadas:  [Provincias] 1------* [Códigos Postales], los campos autonuméricos no le servirán ni para almacenar Códigos de Provincias ni para identificar Códigos Postales, por las siguientes razones:

    1. En España, según tengo entendido, el código de provincia corresponde a dos dígitos que ya están determinados por el organismo competente. La columna de Código de Provincia no puede ser un campo autonumérico (lo que no significa que no se pueda tener un campo de identidad en la tabla como clave principal). CodigoProvincia debe ser un nvarchar(2).

    2. El Código Postal es de cinco dígitos, que incluye los dos dígitos del Código de Provincia y tres dígitos adicionales que asigna la Sociedad Estatal de Correos. Es decir no se puede generar automáticamente. CodigoPostal debe ser una columna del tipo nvarchar(5). En esta tabla, usted puede validar para que siempre los dos primeros dígitos del Código Postal correspondan a el Código de Provincia. También puede utilizar un código de tres dígitos correspondiente a ZonaPostal: nvarchar(3) y agregar una columna calculada:

    CodigoPostal = CodigoProvincia + ZonaPostal

    Tabla Provincia

    CodigoProvincia NVARCHAR(2) - Clave Principal
    NombreProvincia NVARCHAR(256)

    Tabla Codigos Postales

    CodigoProvincia NVARCHAR(2) - Clave Externa.
    ZonaPostal NVARCHAR (3)
    CodigoPostal NVARCHAR(5)  AS (CodigoProvincia + ZonaPotal)

    Es un borrador, pero también una posibilidad.

    Salduos,



    Miguel Torres



    • Editado Miguel Torres C domingo, 4 de septiembre de 2016 22:56
    • Marcado como respuesta Ángelroso lunes, 5 de septiembre de 2016 19:06
    domingo, 4 de septiembre de 2016 22:49

Todas las respuestas

  • Hola Ángelroso

    ¿Se refiere a las columnas autoincrementales (de identidad)?, tenga en cuenta que estas fueron pensadas para generar un valor que se autoincrementa según se configure.

    Ente tipo de columnas cunado se inserta una nueva fila, nada garantiza que el valor se incremente según lo configurado, porque SQL Server deja huecos. Incluso se conoce que en ocasiones puede dar un salto de 1000.

    En conclusión, esa funcionalidad no la podrá adoptar con columnas de identidad.

    Sin embargo, cuando se crea el registro usted puede guardar el tipo de personal que ingresa (médicos, enfermeras, administración, etc) en una columna aparte.

    Posiblemente, no haya entendido lo que usted quiere realizar, para lo cual pudiera usted ser más explícito en aras de obtener una mejor asesoría. Es decir, ¿cuál es el objetivo de ése módulo?.

    Saludos,

     


    Miguel Torres


    domingo, 4 de septiembre de 2016 20:23
  • Hola, Miguel.

    Muchas gracias por contestar.

    Quizás me he explicado mal, lo que pretendo es que por ejemplo una tabla de códigos postales con un campo de identidad y una clave externa de código provincia. Introduzco un registro nuevo e independientemente de si deja huecos, teóricamente el campo de identidad se incrementaría en 1 (si había 50000, ahora sería el 50001). Yo lo que pretendo es que el incremento lo haga en base a la clave externa de código de provincia ( si en Álava había 700, ahora el campo de identidad ahora sería 701).

    Es que yo ese ejemplo lo he leído en alguna parte que ahora no recuerdo. Tampoco sé si era SQL Server.

    Saludos.

    domingo, 4 de septiembre de 2016 20:51
  • Saludos

    Podrias llegar a usar sequencias, te dejo un link sobre un post de sequencias e idendidades.

    http://sqlservertoolbox.blogspot.mx/2016/01/sequence-diferencias-y-similitudes-con.html

    Si te queda cualquier duda por favor no dudes en hacerla llegar y con todo gusto te apoyamos.

    domingo, 4 de septiembre de 2016 21:53
  • Ángelroso

    --Yo lo que pretendo es que el incremento lo haga en base a la clave externa de código de provincia ( si en Álava había 700, ahora el campo de identidad ahora sería 701).

    Las columnas de identidad no actúan en función de otra columna, el desarrollador sólo puede intervenir en el valor de inicio y el valor de incremento. Luego los valores los genera el motor de la base de datos cuando se agrega un nuevo registro. Ese valor no se podrá modificar en ningún momento.

    Ahora, si usted tiene dos tablas relacionadas:  [Provincias] 1------* [Códigos Postales], los campos autonuméricos no le servirán ni para almacenar Códigos de Provincias ni para identificar Códigos Postales, por las siguientes razones:

    1. En España, según tengo entendido, el código de provincia corresponde a dos dígitos que ya están determinados por el organismo competente. La columna de Código de Provincia no puede ser un campo autonumérico (lo que no significa que no se pueda tener un campo de identidad en la tabla como clave principal). CodigoProvincia debe ser un nvarchar(2).

    2. El Código Postal es de cinco dígitos, que incluye los dos dígitos del Código de Provincia y tres dígitos adicionales que asigna la Sociedad Estatal de Correos. Es decir no se puede generar automáticamente. CodigoPostal debe ser una columna del tipo nvarchar(5). En esta tabla, usted puede validar para que siempre los dos primeros dígitos del Código Postal correspondan a el Código de Provincia. También puede utilizar un código de tres dígitos correspondiente a ZonaPostal: nvarchar(3) y agregar una columna calculada:

    CodigoPostal = CodigoProvincia + ZonaPostal

    Tabla Provincia

    CodigoProvincia NVARCHAR(2) - Clave Principal
    NombreProvincia NVARCHAR(256)

    Tabla Codigos Postales

    CodigoProvincia NVARCHAR(2) - Clave Externa.
    ZonaPostal NVARCHAR (3)
    CodigoPostal NVARCHAR(5)  AS (CodigoProvincia + ZonaPotal)

    Es un borrador, pero también una posibilidad.

    Salduos,



    Miguel Torres



    • Editado Miguel Torres C domingo, 4 de septiembre de 2016 22:56
    • Marcado como respuesta Ángelroso lunes, 5 de septiembre de 2016 19:06
    domingo, 4 de septiembre de 2016 22:49
  • Muchas gracias Miguel.

    Lo que me queda claro es que no se puede, que era mi duda.

    El ejemplo de los códigos postales no era el real, lo puse por si aclaraba el asunto.

    He optado por tener un campo contador en la tabla de clave principal, ya que tiene muy pocos registros y acceder al mismo cuando se ingrese un registro.

    Lo dicho, muchas gracias y saludos.

    lunes, 5 de septiembre de 2016 19:12