Identity Specification   zodpovězená otázka

SQL

Dobré odpoledne.

Tak nějak jsem se dostal do situace, kdy jsem vždy pro inkrementaci Id v databázové tabulce používal vlastnost Identity Specification, kde jsem si nastavil automatickou inkrementaci. Teď jsem si napsal proceduru, kde jsem jako poslední údaj uvedl něco takovéhoto:

SET @NewsID = scope_identity()

Výsledek je stejný ale mohl by mi někdo poskytnout teoretické vysvětlení, jaký je vlastně mezi tímto rozdíl a k čemu se radši přiklonit ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pěkně vysvětleno to máte tady: http://knowledge-base.havit.cz/sql/IDENT...

scope_identity() vám vrátí ID naposled přidaného záznamu pro potřebu stored procedury, ve které byl daný záznam přidán. (například vytvoříte nový článek v foru, provedete insert článku ke kterému se vygeneruje nějaké ID které zjistíte právě přes scope_identity() takže ho např. můžete hned vrátit stránce jako output parametr.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Rozdíl mezi identity() a scope_identity je mi znám. Spíš mi jde o to, že když nastavím Identity Specification daného řádku tabulky s primary key tak také vždy dostanu automaticky přidělené následující číslo(předpokládám že stejné jako od funkce scope_identity()) a proto byla spíš otázka mířena tak, jestli je lepší pro tento účel využít scope_identity() nebo to nechat přímo na SQL serveru.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ne, pozor, to nechápete správně. SCOPE_IDENTITY vrací poslední již přidělené IDčko pomocí toho identity specification. Stejně funguje i IDENT_CURRENT nebo @@IDENTITY.

Nechte SQL Server, ať IDčka generuje sám. A pokud potřebujete vědět, jaké ID dostal váš naposledy přidaný záznam, použijte to SCOPE_IDENTITY, musíte jej pochopitelně zavolat až po insertu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Okey, takže se budu tedy držet toho, jak jsem to dělal doposud. Hodnoty ID nechám generovat přímo SQL serverem podle nastavení vlastnosti Identity Specification a pokud budu potřeboval po insertu pracovat s aktuálně přiřazeným ID, které mi SQL server přidělil, natáhnu si jej pomocí SCOPE_IDENTITY(). Tohle by se dalo považovat za dobrý postup ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano, přesně tak.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback