Naslednji način pridobivanja številke (prvi del, drugi del) je lastna tabela za vsako številčenje. Izmed omenjenih SQL podatkovnih baz (Oracle, MSSql in Sqlite) je Oracle že od nekdaj uporabljal sekvence in avtomatičnega številčenja primarnih ključev ne pozna. Za MSSql in SQLite pa je to osnovni način avtomatičnega številčenja. Kot omenjeno že zadnjič je MSSql sekvence dobil šele v reinkernaciji iz leta 2012, SQLite pa jih še vedno ne pozna.
Za avtomatično številčenje na podlagi primarnega ključa je torej potrebno to določiti že v definiciji tabele:
MSSql:
CREATE TABLE SEQ_RACUNI
(
SID INT IDENTITY(1,1)
);
SQLite
CREATE TABLE SEQ_RACUNI
(
SID INTEGER NOT NULL
, PRIMARY KEY(ID)
);
V obeh primerih smo določili tabelo z enim samim poljem, ki se bo avtomatično povečevalo v kolikor mu številke ne določimo. Torej:
INSERT INTO SEQ_RACUNI DEFAULT VALUES
Na ta način torej v MSSql in SQLite podatkovnih bazah dobimo avtomatično številčenje.
POZOR: Seveda pa – glede na sekvence – obstaja velika razlika. Pri sekvencah vsak zahtevek po novi številki samo poveča trenutno vrednost sekvence; v primeru avtomatičnega številčenja primarnih ključev pa se številke zapisujejo v podatkovno bazo in tako imamo za prvih 1000 številk v tabeli 1000 zapisov. To se seveda lahko preprosto reši s periodičnim brisanjem podatkovne tabele:
DELETE FROM SEQ_RACUNI WHERE SID < (SELECT MAX(SID) FROM SEQ_RACUNI)