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

INSERT u vise tabela istovremeno

[es] :: MS SQL :: INSERT u vise tabela istovremeno

[ Pregleda: 1699 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.rs.



+2 Profil

icon INSERT u vise tabela istovremeno10.05.2009. u 18:18 - pre 181 meseci
Hocu da napravim funkcionalnost koja registruje korisnika imam tabele User (ime, prezime ...) UserLogin(userid, usename, password), i sada hocu kada unesem username, password, ime, prezime da mi se ovaj korisnik doda u tabele User i UserLogin. Ne znam kako da li ima neki automatski nacin da se ovo izvrsi ili kako sam ja to zamislio mada nije nesto izvrsi se unos korisnika u User pa se uzme poslednji dodat (koji je on u stvari) tj. njegov userID i njega smestim u promenljivu i smestim u UserLogin... tupavo resenje mislim :)
 
Odgovor na temu

.:Marvin:.
Taurunum

Član broj: 36626
Poruke: 94
91.143.212.*



Profil

icon Re: INSERT u vise tabela istovremeno11.05.2009. u 09:14 - pre 181 meseci
Cek cek, ti ovo radis sve direktno iz SQL Servera (Query Analizer, Management studio...) ??? Ili iz neke aplikacije?

U oba slucaja ima resenja, samo ovo definisi... :)
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
82.117.202.*

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: INSERT u vise tabela istovremeno11.05.2009. u 09:38 - pre 181 meseci
Code:

CREATE PROCEDURE CreateUser
(
    @name nvarchar(100),
    @userName nvarchar(100),
    @password nvarchar(100)
    -- I svi drugi parametri koji ti trebaju
)
AS
DECLARE @userId bigint

BEGIN TRANSACTION
    INSERT INTO [User] VALUES (@name)

    SELECT @userId = SCOPE_IDENTITY()

    INSERT INTO [UserLogin] VALUES (@UserId, @userName, @password)
COMMIT


Naravno treba da prosiris sa proverom ispravnosti, radis rollback ako nesto pukne itd. (Mozda ima gresaka, nemoj kopirati kod, samo ga koristi kao referencu)
Every hamster has his day.
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
80.93.241.*



+2 Profil

icon Re: INSERT u vise tabela istovremeno11.05.2009. u 10:04 - pre 181 meseci
Citat:
.:Marvin:.: Cek cek, ti ovo radis sve direktno iz SQL Servera (Query Analizer, Management studio...) ??? Ili iz neke aplikacije?

U oba slucaja ima resenja, samo ovo definisi... :)

Za sada me zanima samo kako da napravim u SQL ManagemantStudio-u, mada istovremeno testiram i na servisu.

Citat:
Fedya:
Code:

CREATE PROCEDURE CreateUser
(
@name nvarchar(100),
@userName nvarchar(100),
@password nvarchar(100)
-- I svi drugi parametri koji ti trebaju
)
AS
DECLARE @userId bigint

BEGIN TRANSACTION
INSERT INTO [User] VALUES (@name)

SELECT @userId = SCOPE_IDENTITY()

INSERT INTO [UserLogin] VALUES (@UserId, @userName, @password)
COMMIT


Naravno treba da prosiris sa proverom ispravnosti, radis rollback ako nesto pukne itd. (Mozda ima gresaka, nemoj kopirati kod, samo ga koristi kao referencu)


Da da ovako nekako sam i ja mislio, nego sam mislio da nema mozda neki bolji nacin, pa da ne srljam bezveze.
Sta je SCOPE_IDENTITY()?
I da ja sam prilikom vezivanja tabela stavio update i delete rule na cascade, sta mi ovo konkretno omogucava?
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
82.117.202.*

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: INSERT u vise tabela istovremeno11.05.2009. u 13:01 - pre 181 meseci
Citat:
Valerij Zajcev: Sta je SCOPE_IDENTITY()?


SCOPE_IDENTITY ti vraća polednje unetu vrednost u tabelu koja ima Identity polje, i to radi samo unitar trenutnog batcha (za razliku od @@identity koji vraća poslednji uneti ID na nivou baza, tako da sa njim možeš dobiti pogrešnu vrednost u slučaju da dve transakcije kreiraju zapise u isto vreme).

Citat:
Valerij Zajcev: I da ja sam prilikom vezivanja tabela stavio update i delete rule na cascade, sta mi ovo konkretno omogucava?


Ako imaš vezu roditelj/dete postoji problem šta ako se roditelj obriše ili mu se vrednost ključa promeni. Kada staviš cascade delete i obrišeš roditelja server će obrisati sve zapise koji referišu tog roditelja. Kod update ti je slično samo što ce se zapis promeniti a ne obrisati.
Ovo je vrlo moćno i korisno, ali moraš biti siguran u to što radiš inače lako možeš obrisati nešto što ne želiš, i budi siguran da je svako ko želi nešto da obriše svestan da će to obrisati još mnogo toga.
Every hamster has his day.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: INSERT u vise tabela istovremeno11.05.2009. u 13:54 - pre 181 meseci
@@identity vraca poslednji generisani ID u konekciji/sesiji, ne na nivou baze. cak iako radis sa dve i vise baza u okviru jedne skripte @@identity ce biti poslednji ID generisan u poslednjem insert-u bez obzira na to koja je baza. scope_identity je upravo ono sto mu ime kaze, poslednji ID generisan u scope-u skripte u kojoj se poziva. Poslednji ID generisan za tabelu bez obzira na konekciju je zapravo IDENT_CURRENT(tabela)
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

[es] :: MS SQL :: INSERT u vise tabela istovremeno

[ Pregleda: 1699 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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