Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sql server - last insert id

[es] :: .NET :: Sql server - last insert id

[ Pregleda: 2089 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Marko Medojević
Team leader
Digital ST
Beograd

Član broj: 93659
Poruke: 776
*.adsl-a-1.sezampro.yu.

Sajt: www.digitalst.rs


+99 Profil

icon Sql server - last insert id27.12.2008. u 18:43 - pre 186 meseci
Nakon izvršenja INSERT komande potrebno mo je da mi program zapamti ID zadnjeg unosa. To sam izveo sa naredbom
Code:
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]

Nju koristim na sledeći način:
Code:

SqlConnection konekcija = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=galerija;Data Source=sun\sqlexpress");
SqlCommand insertKomanda = new SqlCommand();
insertKomanda.CommandText = String.Format("INSERT INTO slike(naziv, kat) VALUES('{0}', {1})", parNaziv, parKat);
insertKomanda.Connection = konekcija;
SqlCommand selectKomanda = new SqlCommand();
selectKomanda.CommandText = "SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]";
selectKomanda.Connection = konekcija;
konekcija.Open();
insertKomanda.ExecuteNonQuery();
int insertId = Convert.ToInt32(selectKomanda.ExecuteScalar());
konekcija.Close();


Znači između otvaranja i zatvaranja konekcije izvršava se INSERT naredba i SELECT SCOPE_IDENTITY() koji kupi zadnji ID.
Interesije me da li postoji mogućnost da, ako je neko u međuvremenu izvršio INSERT, dobijem ID njegovog unosa umesto mog?
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
212.200.241.*



+104 Profil

icon Re: Sql server - last insert id27.12.2008. u 19:51 - pre 186 meseci
Scope_identity() vraća poslednju vrednost unetu u identity kolonu u aktivnoj konekciji tako da je odgovor NE, uvek ćeš dobiti svoj ID.

"select @@identity" vraća poslenju vrednost nezavisno od konekcije
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Sql server - last insert id27.12.2008. u 20:19 - pre 186 meseci
Nope, scope_identity vraca zadnji ID u trenutnom scope-u (kao sto mu i ime kaze) ne konekcije, poslednji ID generisan unutar sesije (konekcije) je @@IDENTITY. Ne postoji nacin da dobijes ID generisan u drugoj konekciji/transakciji sem preko IDENT_CURRENT (koji opet ima svojih problema). Scope oznacava trenutni kontekst konekcije, tj trenutni deo skripte koja se izvrsava, ne oznacava sesiju/konekciju. Realno ce ove dve vrednosti biti razlicite samo ako insert1 izazove neki triger koji uradi insert2, onda ce scope identity biti onaj iz insert1 a @@IDENTITY biti onaj iz insert2. Iz tog razloga je uvek bolje koristiti SCOPE_IDENTITY za slucaj da neko jednog dana nakaci trigger na tabelu.

Ako hoces da budes siguran da neko drugi nece ubaciti novi red izmedju tvoje dve komande ubaci obe u transakciju, insert ce onda da udari lock na tabelu i ID ce biti poslednji jer niko nece moci da ubaci novi red dok ne commitujes transakciju.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Marko Medojević
Team leader
Digital ST
Beograd

Član broj: 93659
Poruke: 776
79.175.97.*

Sajt: www.digitalst.rs


+99 Profil

icon Re: Sql server - last insert id27.12.2008. u 20:56 - pre 186 meseci
Hvala na odgovorima!
 
Odgovor na temu

[es] :: .NET :: Sql server - last insert id

[ Pregleda: 2089 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.