none
Como manejar serie y correlativo en SQL SERVER 2016 RRS feed

  • Pregunta

  • Buena Noche

    Quisiera mostrar en 2 textbox la siguiente información: En uno iría la serie y en el otro el número y/o correlativo de manera automática al abrir mi formulario. Al guardarlo e iniciar una nueva venta mostrar el numero siguiente (+1).

    Esta es mi tabla venta:

    

    Buscando encontré un artículo al respecto, pero no sé cómo implementarlo a mi tabla. No manejo bien estas instrucciones, por lo que quisiera que me echaran una mano…

    Nota: Uso Sql Server 2016 y Visual Studio C# 2015.

    –Usar una base de datos
    USE Northwind
    go
    –Creación del objeto secuencia
    CREATE SEQUENCE Conteo  
    AS tinyint   
    START WITH 1   
    INCREMENT BY 1   
    GO
    –Creación de una tabla
    Create Table Empleado
    ( IdEmpleado tinyint primary key, NombreEmpleado varchar(150)
    )
    GO
    –Usar la función NEXT VALUE FOR… para usar la secuencia
    INSERT INTO Empleado (Idempleado,NombreEmpleado)
    VALUES  (NEXT VALUE FOR Conteo, ‘Victor Cardenas’)
    INSERT INTO Empleado (Idempleado,NombreEmpleado)
    VALUES (NEXT VALUE FOR Conteo, ‘Claudia Hernández’)
    GO
    
    De antemano gracias.

    viernes, 16 de junio de 2017 1:17

Respuestas

  • No, tanto IDENTITY como SEQUENCE no te garantizan una secuencia n+1, es de esperar los gaps en la secuencia. Agrega una tabla donde puedas contener el último valor generado para un tipo de documento y un número de serie (tres (3) columnas), por cada operación realizada el valor se incrementa en uno, es muy simple, sin embargo, si estimas que la base de datos debe atender peticiones en simultaneo debes de asegurar los bloqueos pertinentes para que un valor no sea tomado por dos o mas peticiones concurrentes.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Enrique AA viernes, 16 de junio de 2017 5:24
    • Marcado como respuesta Joyce_ACModerator martes, 20 de junio de 2017 17:10
    viernes, 16 de junio de 2017 3:57

Todas las respuestas

  • Hola, en SQL existe la propiedad de columna de identidad o identity con el que puedes crear una columna del tipo int con un correlativo automático , hay formas de combinarla  con otras columnas al momento de definir las tablas para generar una serie como la que buscas,sobre ello hay bastante información en la web

    Auto Incremented Column With VARCHAR and NVARCHAR Data Type in SQL

    " ....Al guardarlo e iniciar una nueva venta mostrar el numero siguiente (+1)."

    esta forma de querer mostrar y asumo guardar un correlativo no es la mas indicada porque si lo muestras, supongamos que se cancele una venta, el identity o correlativo ya avanzó en uno sin que se haya guardado nada por lo que te quedarían huecos en la tabla, yo te sugeriría mostrarlo al final de ser posible osea luego de la inserción.


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala.Solo dejo mis respuestas en el foro si son votadas o respuesta, de lo contrario por mantener el orden las borro.Saludos. Lima-Perú.




    • Editado Augusto1982 viernes, 16 de junio de 2017 3:34
    viernes, 16 de junio de 2017 3:27
  • No, tanto IDENTITY como SEQUENCE no te garantizan una secuencia n+1, es de esperar los gaps en la secuencia. Agrega una tabla donde puedas contener el último valor generado para un tipo de documento y un número de serie (tres (3) columnas), por cada operación realizada el valor se incrementa en uno, es muy simple, sin embargo, si estimas que la base de datos debe atender peticiones en simultaneo debes de asegurar los bloqueos pertinentes para que un valor no sea tomado por dos o mas peticiones concurrentes.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Enrique AA viernes, 16 de junio de 2017 5:24
    • Marcado como respuesta Joyce_ACModerator martes, 20 de junio de 2017 17:10
    viernes, 16 de junio de 2017 3:57
  • Lo que menciona William es correcto no se puede garantizar por varias cuestiones, uno de ellos es concurrencia, otro problema son transacciones que no se terminan, otro mas seria el costo de mantener una secuencia, lo cual traería un mayor costo en la transacción, lo que hace más difícil el manejo de la misma. Entre otras cuestiones mas puntuales, por lo cual te garantiza unicidad y incremento.
    viernes, 16 de junio de 2017 5:27