Tento článek zkoumá Totožnost funkce v SQL Server s příklady a rozdíly mezi těmito funkcemi.
přehled sloupců IDENTITY
v SQL Serveru vytvoříme sloupec identity pro automatické generování přírůstkových hodnot. Generuje hodnoty založené na předdefinované osivo (počáteční hodnota) a krok (přírůstek) hodnota. Předpokládejme například, že máme tabulku zaměstnanců a chceme automaticky generovat Employeid., Máme počáteční ID zaměstnance 100 a dále chceme zvýšit každý nový EmpID o jeden. V tomto případě musíme definovat následující hodnoty.
- Seed: 100
- Krok 1
řekněme, vložte několik záznamů v této tabulce a zobrazit záznamy.
můžete vidět, že první zaměstnanec dostane ID hodnotu 100 a každá nová hodnota evidence ID dostane přírůstek jednoho.
máme několik užitečných funkcí Identity v SQL Serveru pro práci se sloupci IDENTITY v tabulce. Pojďme prozkoumat následující funkce IDENTITY s příklady.,
- SQL @@IDENTITY Funkce
- SQL SCOPE_IDENTITY() Funkce
- SQL IDENT_CURRENT Funkce
- SQL Funkce IDENTITA
SQL @@IDENTITY Funkce
použijeme funkce systému @@IDENTITY vrátí maximální používá IDENTITY hodnoty v tabulce pro sloupec IDENTITY v rámci aktuální relace. Jakmile vložíme řádek do tabulky, sloupec funkce @ @ IDENTITY dává hodnotu IDENTITY generovanou příkazem. Pokud spustíme jakýkoli dotaz, který nevytvořil hodnoty IDENTITY, získáme nulovou hodnotu ve výstupu., Identita SQL @@běží pod rozsahem aktuální relace. Nemůžeme jej použít na vzdáleném nebo propojeném serveru.
pojďme to pochopit pomocí následujícího příkladu.
- Krok 1: Máme aktuální maximální hodnotu identity 110 v EmployeeData tabulky
- Krok 2: V aktuální relaci, jsme-li vložit záznam v EmployeeData stolu., To zvýší hodnotu identity tím, že jeden
- Krok 3: můžeme ověřit, že maximální používá hodnotu identity je 111
- Krok 4: Použijeme SELECT @@IDENTITY funkce v aktuální relaci získat hodnotu identity generovaná v této relaci
Pojďme vložit více záznamů v tabulce a spustit SELECT @@IDENTITY.
pokud do relace vložíme více záznamů, vyberte @ @ identita Vrátí maximální hodnotu IDENTITY generovanou v této relaci., V následujícím příkladu vložíme tři záznamy a zvyšuje hodnoty IDENTITY o tři z aktuální hodnoty identity 111.
Pokud příkaz nevytvořil žádné hodnoty identity, vrátí hodnoty NULL na výstupu.
SQL SCOPE_IDENTITY() funkce
použijeme SCOPE_IDENTITY() funkce vrátí poslední IDENTITY hodnotu, v tabulce pod stávající rozsah. Rozsahem může být modul, spoušť, funkce nebo uložený postup., Můžeme považovat funkci SQL SCOPE_IDENTITY() podobnou funkci @ @ IDENTITY, ale je omezena na určitý rozsah. Vrátí hodnotu NULL, pokud je tato funkce zapojena dříve, než příkaz insert generuje hodnotu ve stejném rozsahu.
v následujícím příkladu vidíme, že jak @@identita, tak SCOPE_IDENTITY () vracejí stejnou hodnotu v aktuální relaci a podobném rozsahu.
Pojďme pochopit rozdíl mezi SCOPE_IDENTITY() a @@IDENTITY s dalším příkladem.,
Vezměme si, že máme dvě tabulky EmployeeData a oddělení tabulky. Na tabulce EmployeeData vytvoříme spouštěč vložek. Jakmile vložíme libovolný řádek na EmployeeData, volá po definovaném triggeru pro vložení řádku do oddělení.
v následujícím dotazu vytvoříme spoušť pro vložení výchozí hodnoty ‚ IT ‚ do tabulky oddělení pro každou vložku v tabulce EmployeeData.,f7″>
1
2
3
4
5
6
|
VYTVOŘIT SPOUŠTĚCÍ T_INSERT_DEPARTMENT
NA EmployeeData
VLOŽIT
BEGIN
VLOŽIT Oddělení HODNOT („TO“)
END;
|
vložit hodnotu v Employee tabulka dat a zobrazit výstup z obou @@IDENTITY a SCOPE_IDENTITY() funkce.,
v aktuální relaci jsme vložili data do tabulky EmployeeData. Vytváří identitu v této tabulce. Hodnota osiva identity je 1 pro tabulku EmployeeData.
jakmile vložíme hodnotu do tabulky EmployeeData, spustí spoušť pro vložení hodnoty do tabulky oddělení. Hodnota osiva identity je 100 pro tabulku oddělení.
- dostaneme výstup 100 pro funkci SELECT @ @ IDENTITY
- funkce SCOPE_IDENTITY vrací hodnotu identity pouze pod aktuálním rozsahem., To dává výstup 1 pro tuto funkci
SQL IDENT_CURRENT() funkce
použijeme funkce IDENT_CURRENT vrátí poslední hodnota IDENTITY generovaná pro zadanou tabulku podle nějaké spojení. Nepovažuje rozsah dotazu SQL, který generuje hodnotu identity. Musíme určit tabulku, pro kterou chceme zkontrolovat hodnotu identity.
na následujícím obrázku vidíme, že vkládáme data do ID relace 64 a generuje hodnotu identity 2 v tabulce EmployeeData.,
můžeme zkontrolovat v jiném okně Připojení aktuální hodnotu identity pro tabulku EmployeeData a získat stejný výstup jako hodnota identity 2.,
1
|
SELECT IDENT_CURRENT(‚EmployeeData‘) AS IdentityValue
|
SQL IDENTITY Function
In my previous article, we explored SQL SELECT INTO Statement, to create a new table and inserted data into it from the existing table., Funkci SQL IDENTITY můžeme použít k vložení hodnot identity do tabulky vytvořené SQL SELECT do příkazu.
Pokud zdrojová tabulka obsahuje sloupec IDENTITY, pak ji zdědí tabulka vytvořená pomocí příkazu SELECT INTO. Zvažte scénář, ve kterém chcete vytvořit tabulku pomocí příkazu SELECT INTO z výstupu zobrazení nebo se připojit z více tabulek. V tomto případě Chcete také vytvořit sloupec IDENTITY v nové tabulce.,
- poznámka: funkce IDENTITY SQL se liší od Vlastnosti IDENTITY, kterou používáme při vytváření libovolné tabulky.
pro použití funkce SQL Identity musíme zadat datový typ sloupce. Musíme také určit hodnoty osiva a kroku, abychom definovali konfiguraci identity.
v příkazu Select nemůžeme použít funkci SQL IDENTITY. Dostaneme následující chybovou zprávu.
Msg 177, Úroveň 15 Stav 1, Řádek 2ο IDENTITY funkci lze použít pouze tehdy, když příkaz SELECT má V bodě.,
vytvoříme tabulku pomocí příkazu SQL SELECT INTO s následujícím dotazem.
jakmile se příkaz spustí, zkontrolujte vlastnosti tabulky pomocí příkazu sp_help.
1
|
sp_help ‚TEMPTABLE‘
|
můžete vidět sloupec IDENTITY v TEMPTABLE vlastnosti dle stanovených podmínek.,
podívejme se na další příklad. Proveďte následující příkaz.,
1
2
3
4
5
|
VYBERTE IDENTITU( INT, 100, 2) JAKO NEW_ID,
ID
Jméno
DO temp2
OD employeedata;
|
již Máme sloupce IDENTITY v EmployeeData stolu. Nová tabulka temp2 také dědí sloupec IDENTITY., Nemůžeme mít v tabulce více sloupců IDENTITY. Z tohoto důvodu dostaneme následující chybovou zprávu.
Msg 8108, Level 16 1 Stav Linky 1 nelze přidat sloupec identity pomocí SELECT INTO, až na stůl temp2, který už má sloupec „ID“, která dědí identity vlastnost.
Shrnutí
- SQL IDENTITY Funkce SCOPE_IDENTITY, IDENT_CURRENT, a @@IDENTITY vrátí podobný výstup pro sloupce IDENTITY v aktuální relace
- SCOPE_IDENTITY vrátí hodnoty v rámci současného rozsahu., Můžeme definovat rozsah jako modul, Uložené procedury, aktivační události nebo funkce
- funkce IDENT_CURRENT vrátí hodnotu identity pro zadané tabulky týkající se spojení, které modifikované hodnoty
- můžeme použít SQL funkce IDENTITA definovat IDENTITU v tabulce vytvořené pomocí SQL SELECT INTO
Závěr
V tomto článku jsme zkoumali Identitu funkce v SQL Server. Měli bychom být obeznámeni s funkcemi, abychom je mohli používat při psaní dotazů t-SQL. Pokud máte připomínky nebo dotazy, neváhejte je nechat v komentářích níže.,
- Autora
- Poslední Příspěvky
je tvůrcem jedné z největších bezplatných online sbírek článků na jedno téma, s jeho 50dílnou sérií na serveru SQL vždy na skupinách dostupnosti. Na základě svého příspěvku do komunity SQL Server byl v letech 2020 a 2021 na sqlshacku nepřetržitě oceněn různými oceněními včetně prestižního „nejlepšího autora roku“.,
Raj je vždy zájem o nové výzvy, takže pokud budete potřebovat poradenství na jakékoliv téma, na něž v jeho spisech, on může být dosaženo na rajendra.gupta16@gmail.,com
Zobrazit všechny příspěvky od Rajendra Gupta
- Vykonávající vedlejší a hlavní verze aktualizace pro AWS RDS SQL Server – 29. ledna, 2021
- Nasazení AWS RDS instance PostgreSQL – 27. ledna 2021
- Migrace v prostorách SQL databází AWS RDS serveru SQL Server pomocí AWS DMS – 25. ledna 2021