Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 12386|Odgovoriti: 0

[Vir] SqlServer implementira ID novo vstavljenega zapisa

[Kopiraj povezavo]
Objavljeno na 15. 06. 2016 11:45:40 | | |

Vir: Internet Avtor: Neznan

- Ustvarjanje baz podatkov in tabel

ustvarjanje baze podatkov MyDataBase

uporabi MyDataBase

Create table mytable

id int identiteta(1,1),

Ime Varchar(20)



--Izvedite ta SQL, da ugotovite vrednost samoinkrementalnega stolpca, ki ustreza pravkar vstavljenemu zapisu

vstavi v tabelo vrednosti ('Li Si')

Izberite @@identity

2. Primerjava treh metod

V SQL Server 2000 obstajajo tri podobne funkcije: SCOPE_IDENTITY, IDENT_CURRENT in @@IDENTITY, ki vse vračajo vrednosti, vstavljene v stolpec IDENTITY.

IDENT_CURRENT Vrne zadnjo identifikacijsko vrednost, generirano za določeno tabelo v katerikoli seji in obsegu. IDENT_CURRENT Ni omejeno na obseg in sejo, ampak na določeno tabelo. IDENT_CURRENT Vrne vrednost, generirano za določeno tabelo v katerikoli seji in obsegu.

@@IDENTITY vrne zadnjo identifikacijsko vrednost, generirano za katerokoli tabelo v vseh obsegih trenutne seje.

SCOPE_IDENTITY Vrne zadnjo identificirano vrednost, ki je bila ustvarjena za trenutno sejo, in katerokoli tabelo v trenutnem obsegu

SCOPE_IDENTITY in @@IDENTITY vrneta zadnjo identifikacijsko vrednost, ki je bila ustvarjena v kateri koli tabeli v trenutni seji. Vendar SCOPE_IDENTITY vrne le vrednosti, vstavljene v trenutni obseg; @@IDENTITY Ni omejeno na določen obseg.

Na primer, obstajata dve tabeli, T1 in T2, na katerih je določen sprožilec INSERT. Ko je vrstica vstavljena v T1, se sproži sprožilec in vrstica se vstavi v T2. Ta primer prikazuje dva teleskopa: enega na T1 in enega na T2 kot posledico sprožilca.

Če predpostavimo, da imata tako T1 kot T2 stolpca IDENTITY, bosta @@IDENTITY in SCOPE_IDENTITY na koncu stavka INSERT na T1 vrnila različne vrednosti.

@@IDENTITY Vrne zadnjo vrednost stolpca IDENTITY, vstavljeno v katerikoli obseg v trenutni seji, kar je vrednost, vstavljena v T2.

SCOPE_IDENTITY() vrne vrednost IDENTITY, vstavljeno v T1, kar je zadnji INSERT, ki se je zgodil v istem obsegu. Če je funkcija SCOPE_IDENTITY() poklicana, preden se v obsegu pojavi stavka vstavljanje v identitetni stolpec, funkcija vrne vrednost NULL.

Vrednosti, ki jih vrneta IDENT_CURRENT('T1') in IDENT_CURRENT('T2'), so zadnje samoinkrementalne vrednosti obeh tabel.

Eksperiment AJQC: (40 lokalnih niti, 40+40 oddaljenih niti hkrati test, vstavljanje 1200W vrstic), zaključek je:

1. V tipičnih kaskadnih aplikacijah. @@IDENTITY ni mogoče uporabiti, sočasni konflikti pa pridejo, ko je 1W večvrstni na CII850, 256M SD napravah. Na P42.8C in 512M DDR prihaja do sočasnega konflikta, ko je več kot 6000 linij.

2.SCOPE_IDENTITY() je povsem zanesljiv in ga je mogoče uporabiti v procesu shranjevanja, celo sprožilcev ni treba graditi, prav tako ni sočasnih konfliktov

SELECT IDENT_CURRENT('TableName') - Vrne zadnjo vrednost oznake, generirano v določeni tabeli

SELECT IDENT_INCR('TableName') - vrne označeno vrednost inkrementa polja za določeno tabelo

SELECT IDENT_SEED('TableName') - vrne označeno začetno vrednost polja za določeno tabelo

Samodejno vrne številko zadnjega vstavljenega zapisa

IZBERI IDENT_CURRENT('TableName')

Vrnite se na naslednjo samodejno številko:

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

SELECT @@IDENTITY - Vrne zadnjo označeno vrednost, ki je bila generirana v vseh tabelah v trenutni seji








Prejšnji:SQLServer implementira univerzalno metodo delitve nizov
Naslednji:Delite uporaben iskalni artefakt
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com