Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 12386|Odpověď: 0

[Zdroj] SqlServer implementuje ID nově vloženého záznamu

[Kopírovat odkaz]
Zveřejněno 15.06.2016 11:45:40 | | |

Zdroj: Internetový autor: Neznámý

- Vytvářet databáze a tabulky

vytvořit databázi MyDataBase

použijte MyDataBase

Vytvořit tabulku v Mytable

id int identity(1,1),

Jméno Varchar(20)



--Vykonejte tento SQL a zjistěte hodnotu samoinkrementálního sloupce odpovídajícího právě vloženému záznamu

vložit do tabulky hodnot ('Li Si')

Vyberte @@identity

2. Srovnání tří metod

V SQL Server 2000 existují tři podobné funkce: SCOPE_IDENTITY, IDENT_CURRENT a @@IDENTITY, které všechny vracejí hodnoty vložené do sloupce IDENTITY.

IDENT_CURRENT Vrací poslední identifikační hodnotu generovanou pro konkrétní tabulku v jakékoli relaci a v jakémkoli rozsahu. IDENT_CURRENT Není omezen rozsahem a sezením, ale specifickou tabulkou. IDENT_CURRENT Vrací hodnotu generovanou pro konkrétní tabulku v libovolné relaci a rozsahu.

@@IDENTITY Vrátí poslední identifikační hodnotu generovanou pro libovolnou tabulku ve všech rozsahových oblastech aktuální relace.

SCOPE_IDENTITY Vrací poslední identifikovanou hodnotu, která byla vygenerována pro aktuální relaci, a jakoukoli tabulku v aktuálním rozsahu

SCOPE_IDENTITY a @@IDENTITY vracejí poslední identifikační hodnotu, která byla vygenerována v jakékoli tabulce v aktuální relaci. Nicméně SCOPE_IDENTITY vrací pouze hodnoty vložené do aktuálního rozsahu; @@IDENTITY Není omezeno na konkrétní rozsah.

Například existují dvě tabulky, T1 a T2, ve kterých je definován spouštěč INSERT. Když je řádek vložen do T1, spustí se spoušť a do T2 se vloží řádek. Tento příklad ilustruje dva dalekohledy: jeden na T1 a druhý na T2 jako výsledek spouště.

Za předpokladu, že T1 i T2 mají sloupce IDENTITY, @@IDENTITY a SCOPE_IDENTITY na konci příkazu INSERT na T1 vrátí různé hodnoty.

@@IDENTITY Vrátí poslední hodnotu sloupce IDENTITY vloženou do libovolného rozsahu v aktuální relaci, což je hodnota vložená v T2.

SCOPE_IDENTITY() vrací hodnotu IDENTITY vloženou do T1, což je poslední INSERT, který se odehrál ve stejném rozsahu. Pokud je funkce SCOPE_IDENTITY() vyvolána dříve, než příkaz insertion do sloupce identity nastane v rozsahu, funkce vrátí hodnotu NULL.

Hodnoty vrácené IDENT_CURRENT('T1') a IDENT_CURRENT('T2') jsou posledními samoinkrementálními hodnotami obou tabulek.

Experiment ajqc: (40 lokálních vláken, 40+40 vzdálených vláken současně testuje, vkládá 1200W řádky), závěr je:

1. V typických kaskádových aplikacích. @@IDENTITY nelze použít a současné konflikty docházejí, když je 1W víceřadové na strojích CII850, 256M SD. Na P42.8C a 512M DDR dochází ke současnému konfliktu, když je více než 6000 linek.

2.SCOPE_IDENTITY() je naprosto spolehlivý a lze jej použít v procesu ukládání dat, není třeba vytvářet ani spouštěče a nedochází k současným konfliktům

SELECT IDENT_CURRENT('TableName') - Vrátí poslední hodnotu štítku generovanou ve specifikované tabulce

SELECT IDENT_INCR('TableName') - vrací označenou hodnotu inkrementu pole pro zadanou tabulku

SELECT IDENT_SEED('TableName') - vrací označenou hodnotu pole pro zadanou tabulku

Automaticky vrátí číslo posledního vloženého záznamu

VYBERTE IDENT_CURRENT('TableName')

Vraťte se k dalšímu automatickému číslu:

SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))

SELECT @@IDENTITY - Vrátí poslední označenou hodnotu, která byla vygenerována ve všech tabulkách aktuální relace








Předchozí:SQLServer implementuje univerzální metodu dělení řetězců
Další:Sdílejte užitečný artefakt vyhledávání
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com