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 :)
INSERT u vise tabela istovremeno
Zaključano
Zakačeno
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... :)
U oba slucaja ima resenja, samo ovo definisi... :)
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
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)
Potpis
Every hamster has his day.
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... :)
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:
Naravno treba da prosiris sa proverom ispravnosti, radis rollback ako nesto pukne itd. (Mozda ima gresaka, nemoj kopirati kod, samo ga koristi kao referencu)
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
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?
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.
Potpis
Every hamster has his day.
@@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)
Potpis
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ć
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ć