En el Perú los formatos numéricos de las facturas es 001-000033 , la serie (001) cambia eventualmente pero el valor auto-incrementado es el mismo:
001-000034 001-000035 001-000036 ...
Para manejar esto en MySQL he preparado una solución basada en otro articulo mio:
- Crear la tabla para guardar los números actuales:
create table _sequence ( seq_name varchar(50) not null primary key, seq_group varchar(10) not null, seq_val int unsigned not null );
- Crear una función para obtener el valor siguiente e incrementarlo:
delimiter // drop function if exists getNextCustomSeq// create function getNextCustomSeq ( sSeqName varchar(50), sSeqGroup varchar(10) ) returns varchar(20) begin declare nLast_val int; set nLast_val = (select seq_val from _sequence where seq_name = sSeqName and seq_group = sSeqGroup); if nLast_val is null then set nLast_val = 1; insert into _sequence (seq_name,seq_group,seq_val) values (sSeqName,sSeqGroup,nLast_Val); else set nLast_val = nLast_val + 1; update _sequence set seq_val = nLast_val where seq_name = sSeqName and seq_group = sSeqGroup; end if; set @ret = (select concat(sSeqGroup,'-',lpad(nLast_val,6,'0'))); return @ret; end// delimiter ;
- Crear un procedimiento almacenado para modificar el valor actual:
delimiter // drop procedure if exists sp_setSeqCustomVal// create procedure sp_setCustomVal(sSeqName varchar(50), sSeqGroup varchar(10), nVal int unsigned) begin if (select count(*) from _sequence where seq_name = sSeqName and seq_group = sSeqGroup) = 0 then insert into _sequence (seq_name,seq_group,seq_val) values (sSeqName,sSeqGroup,nVal); else update _sequence set seq_val = nVal where seq_name = sSeqName and seq_group = sSeqGroup; end if; end// delimiter ;
Haciendo algunas pruebas:
- Crear una tabla:
create table custom_autonums ( id int not null primary key auto_increment, seq_1 varchar(20), -- custom sequence 1 seq_2 varchar(20), -- custom sequence 2 unique(seq_1), unique(seq_2) );
- Crear un trigger para la tabla:
delimiter // drop trigger if exists custom_autonums_bi// create trigger custom_autonums_bi before insert on custom_autonums for each row begin set new.seq_1 = getNextCustomSeq("seq_1","001"); set new.seq_2 = getNextCustomSeq("seq_2","DBA"); end// delimiter ;
- Insertando algunos valores:
insert into custom_autonums (id) values (null),(null),(null); select * from custom_autonums; +----+------------+------------+ | id | seq_1 | seq_2 | +----+------------+------------+ | 4 | 001-000001 | DBA-000001 | | 5 | 001-000002 | DBA-000002 | | 6 | 001-000003 | DBA-000003 | +----+------------+------------+ 3 rows in set (0.00 sec)
- Alterando los valores actuales:
call sp_setCustomVal('seq_1','001',675); insert into custom_autonums (id) values (null),(null),(null); select * from custom_autonums; +----+------------+------------+ | id | seq_1 | seq_2 | +----+------------+------------+ | 4 | 001-000001 | DBA-000001 | | 5 | 001-000002 | DBA-000002 | | 6 | 001-000003 | DBA-000003 | | 7 | 001-000676 | DBA-000004 | | 8 | 001-000677 | DBA-000005 | | 9 | 001-000678 | DBA-000006 | +----+------------+------------+ 6 rows in set (0.00 sec)
Enjoy!
Hola! Sabes como reiniciar un autonumerico en MySQL. Gracias!!
ALTER TABLE [tu_tabla] AUTO_INCREMENT=0;
He Tio Eso Es SQL-Server
No, no lo es u_u
hola me gsuataria que me ayudaran
como crear un procedimiento alamcenado
para un campo autoincremente
create table Producto(
idPro in not null primary
nombre)
hola me gsuataria que me ayudaran
como crear un procedimiento alamcenado
para un campo autoincremente
create table Producto(
idPro in not null primary identity
nombre)
como podria hacer para que el auto_increment enpieze desde un numero en espesifico? por ejemplo me gustaria que empiese a contar desde el numero 500.
como puedo hacer eso?