Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 12386|Odpoveď: 0

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

[Kopírovať odkaz]
Zverejnené 15. 6. 2016 11:45:40 | | |

Zdroj: Internet Autor: Neznámy

- Vytváranie databáz a tabuliek

vytvoriť databázu MyDataBase

použite MyDataBase

Vytvorte tabuľku v Mytable

id int identity(1,1),

Meno Varchar(20)



--Vykonajte toto SQL, aby ste zistili hodnotu samoinkrementálneho stĺpca zodpovedajúceho práve vloženému záznamu

vložiť do mytable hodnôt ('Li Si')

Vyberte @@identity

2. Porovnanie troch metód

V SQL Server 2000 existujú tri podobné funkcie: SCOPE_IDENTITY, IDENT_CURRENT a @@IDENTITY, ktoré všetky vracajú hodnoty vložené do stĺpca IDENTITY.

IDENT_CURRENT Vráti poslednú identifikačnú hodnotu generovanú pre konkrétnu tabuľku v akejkoľvek relácii a v akomkoľvek rozsahu. IDENT_CURRENT Nie je obmedzený rozsahom a reláciou, ale špecifikovanou tabuľkou. IDENT_CURRENT Vráti hodnotu generovanú pre konkrétnu tabuľku v ľubovoľnej relácii a rozsahu.

@@IDENTITY Vráti poslednú identifikačnú hodnotu generovanú pre akúkoľvek tabuľku vo všetkých rozsahoch aktuálnej relácie.

SCOPE_IDENTITY Vráti poslednú identifikovanú hodnotu, ktorá bola vygenerovaná pre aktuálnu reláciu, a akúkoľvek tabuľku v aktuálnom rozsahu

SCOPE_IDENTITY a @@IDENTITY vracajú poslednú identifikačnú hodnotu, ktorá bola vygenerovaná v akejkoľvek tabuľke v aktuálnej relácii. Avšak SCOPE_IDENTITY vracia iba hodnoty vložené do aktuálneho rozsahu; @@IDENTITY Nie je obmedzený na konkrétny rozsah.

Napríklad existujú dve tabuľky, T1 a T2, na ktorých je definovaný spúšťač INSERT. Keď sa riadok vloží do T1, trigger sa spustí a riadok sa vloží do T2. Tento príklad ilustruje dva zameriavače: jeden na T1 a druhý na T2 v dôsledku spúšťača.

Za predpokladu, že T1 aj T2 majú stĺpce IDENTITY, @@IDENTITY a SCOPE_IDENTITY vrátia na konci príkazu INSERT na T1 rôzne hodnoty.

@@IDENTITY Vráti poslednú hodnotu stĺpca IDENTITY vloženú do akéhokoľvek rozsahu v aktuálnej relácii, čo je hodnota vložená v T2.

SCOPE_IDENTITY() vráti hodnotu IDENTITY vloženú v T1, čo je posledné INSERT, ktoré sa stalo v rovnakom rozsahu. Ak je funkcia SCOPE_IDENTITY() zavolaná predtým, než sa príkaz insertion do identity stĺpca objaví v scope, funkcia vráti hodnotu NULL.

Hodnoty vrátené IDENT_CURRENT('T1') a IDENT_CURRENT('T2') sú posledné samoinkrementálne hodnoty týchto dvoch tabuliek.

Experiment ajqc: (40 lokálnych vlákien, 40+40 vzdialených vlákien súčasne testuje, vkladá 1200W riadok), záver je:

1. V typických kaskádových aplikáciách. @@IDENTITY nie je možné použiť a súbežné konflikty nastanú, keď je 1W viacriadkové na počítačoch CII850, 256M SD. Na P42.8C a 512M DDR dochádza k súbežnému konfliktu, keď je len viac ako 6000 riadkov.

2.SCOPE_IDENTITY() je absolútne spoľahlivý a dá sa použiť v procese ukladania, dokonca ani spúšťače nie je potrebné vytvárať a neexistujú žiadne súbežné konflikty

SELECT IDENT_CURRENT('TableName') - Vráti poslednú hodnotu štítku generovanú v zadanej tabuľke

SELECT IDENT_INCR('TableName') - vráti označenú hodnotu inkrementu poľa pre zadanú tabuľku

SELECT IDENT_SEED('TableName') - vráti označenú počiatočnú hodnotu poľa pre zadanú tabuľku

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

VYBERTE IDENT_CURRENT('TableName')

Návrat k ďalšiemu automatickému číslu:

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

SELECT @@IDENTITY - Vráti poslednú označenú hodnotu, ktorá bola vygenerovaná vo všetkých tabuľkách v aktuálnej relácii








Predchádzajúci:SQLServer implementuje univerzálnu metódu delenia reťazcov
Budúci:Podeľte sa o užitočný vyhľadávací artefakt
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com