SQL Server - campo autoincrementable pero sin ser autonumerico

 
Vista:
sin imagen de perfil
Val: 1
Ha disminuido su posición en 16 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

campo autoincrementable pero sin ser autonumerico

Publicado por Julio Cesar (2 intervenciones) el 04/09/2019 22:23:03
Hola amigos necesito que me ayuden!!!
El problema es que tengo una tabla FACTURA y en ella tengo mi campo autonumerico ID_FACTURA: INT pero tambien tengo un campo que se llama SERIE:INT, el cual necesito que sea un campo que se incremente automatico cada ves que se inserte un nuevo registro. Tambien ocurre que si borro un registro, el campo ID_FACTURA que es autonumerico ya no mantiene la secuensia como es logico, pero el campo serie si debe mantener siempre la secuencia por ejemplo:
ID_FACTURA: 1 - 2 - 4 - 6 - 7- 8
SERIE: 1 - 2 - 3 - 4 - 5 - 6
A continuacion les muestro el codigo con el qual lo estoy intentando pero la verdad es que no sale como necesito

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
create proc spinsertar_factura
@id_factura int=null output,
@id_t_factura int,
@cliente varchar(50),
@serie int,
@fecha date,
@descripcion varchar(250)
as
BEGIN
IF @serie = null ---esto no se cumple nunca
BEGIN
insert into factura (id_t_factura, cliente, serie, fecha, descripcion)
values (@id_t_factura, @cliente, (select (serie)+1 from factura), @fecha, @descripcion)
--obtener codigo autogenerado
set @id_factura=@@IDENTITY
END
ELSE
BEGIN
insert into factura (id_t_factura, cliente, serie, fecha, descripcion)
values (@id_t_factura, @cliente, (select max(serie)+1 from factura), @fecha, @descripcion)
--obtener codigo autogenerado
set @id_factura=@@IDENTITY
END
END
go
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

campo autoincrementable pero sin ser autonumerico

Publicado por Isaias (4558 intervenciones) el 06/09/2019 17:40:03
Primero, cambie @@identity, por SCOPE_IDENTITY()

Segundo, si va a borrar (DELETE) un registro, esta opcion no le sirve, ya que no se regenera la numeracion, en todo caso, no haga un borrado fisico, coloque un campo tipo BOLEANO donde identifique aquellos registros "eliminados" con un "0" y los "vivos" con un "1"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

campo autoincrementable pero sin ser autonumerico

Publicado por Julio Cesar (2 intervenciones) el 07/09/2019 09:59:19
Muchas gracias por el aporte.
La verdad es que ya logre resolver el problema, no puedo modificar el @@IDENTITY pues de el depende otra tabla.
Bueno acontinuacion adjunto el codigo de como resolvi el problema.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ALTER proc [dbo].[spinsertar_factura]
@id_factura int=null output,
@id_t_factura int,
@cliente varchar(50),
@serie int,
@fecha date,
@descripcion varchar(250)
as
BEGIN
IF (select max(serie) from factura) >= 1   --la primera vez no se cumple pues es null y pasa al else tomando valor 1 la 1ra serie
BEGIN
insert into factura (id_t_factura, cliente, serie, fecha, descripcion)
values (@id_t_factura, @cliente, (select max(serie)+1 from factura), @fecha, @descripcion)
--obtener codigo autogenerado
set @id_factura=@@IDENTITY
END
ELSE
BEGIN
insert into factura (id_t_factura, cliente, serie, fecha, descripcion)
values (@id_t_factura, @cliente, 1, @fecha, @descripcion)
--obtener codigo autogenerado
set @id_factura=@@IDENTITY
END
END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar