SQL Server

Generátor unikátních ID

V době, kdy ještě neexistovaly v SQL serveru sekvence, jsme při vytvoření generátoru unikátních IDček napříč celou databází byli odkázání na lidovou tvořivost. Dnes si ukážeme snad nejjednodušší možné řešení s využitím SCOPE_IDENTITY () a jedné tabulky, která drží naše již použitá IDčka.

Není to nic těžkého a vše funguje poměrně efektivně, pokud správně pracujeme s transakcemi. Ideální je, že nám nevadí, pokud je nějaké ID vygenerováno, ale následně se nepoužije, protože navazující transakce byla odrolována. Pak můžeme jednoduše volat naši proceduru mimo transakci a nemusíme se bát zámků nebo jiných potíží s výkonem vyjma případu, že bychom narazili na omezení na úrovni úložiště nebo interních zámků SQL Serveru (latches), pokud bychom nová IDčka generovali rychlostí několika tisíc a více položek za vteřinu.

Ve skriptu níže si vytvoříme jednoduchou uloženou proceduru, která zapisuje vždy jeden nový řádek do tabulky [dbo].[IdsTable], která drží naše již vygenerovaná IDčka. Procedura nám vrací hodnotu SCOPE_IDENTITY() posledně vloženého záznamu jako výstupní parametr @Id, se kterým již můžeme dále pracovat.  Skript si v ukázce pustíme 10x pomocí GO 10 a jednotlivá IDčka vidíme ve výstupní okně Management Studia.

Leave a Reply

Your email address will not be published. Required fields are marked *