SQLServer - codigo autoincremento ninja |
Top Previous Next |
// autoincremento para SQL
//--------------------- novo funciona no ib select cast(min(cod_rua +1)as integer) as novo from tb_rua where (cod_rua+1) not in(select cod_rua from tb_rua) union select 1 from tb_rua having (min(cod_rua) <> 1) or (count(cod_rua)=0) order by 1
// mult emp select cast(min(cod_rua +1)as integer) as novo from tb_rua where cod_emp=2 and (cod_rua+1) not in(select cod_rua from tb_rua where cod_emp=2) union select 1 from tb_rua where cod_emp=2 having (min(cod_rua) <> 1) or (count(cod_rua)=0) order by 1
//------------------------antigo (lento no ib) // ---- testado no interbase e aprovado pelo inmetro select min(cast(b.cod_funci + 1 as int)) as novo from funcion b left outer join funcion c on (b.cod_funci = c.cod_funci - 1 and b.cod_emp = c.cod_emp) where (c.cod_funci is null) and (b.cod_funci > 0) and (b.cod_emp = 2) union select 1 from funcion where cod_emp = 2 having (min(cod_funci) <> 1) or (count(cod_funci)=0) order by 1
// ---- DBF (bicheira) select cast(b.codigo + 1 as int) as novo from tabela b left outer join tabela c on (b.codigo = c.codigo - 1) where (c.codigo is null) and (b.codigo > 0) order by 1
// OBS: quando o SQL encima não retornar valor é porque o próximo // codigo é 1. Pelo que eu notei, apareceu um monte de registros e, // para pegar o ninja tem que sempre pegar o primeiro registro. Até que // funciona legal esta bixera, sô. |