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+1not in(select cod_rua from tb_rua)

union

select 1

from tb_rua

having (min(cod_rua) <> 1or (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+1not 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) <> 1or (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 nulland (b.cod_funci > 0and (b.cod_emp = 2)

union

select 1

from funcion

where cod_emp = 2

having (min(cod_funci) <> 1or (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 nulland (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ô.