PDA

Prikaži potpunu verziju : SQL problem oko kod-a


Aleksandar1987
24.1.2012, 20:38
Pozdrav svima! Treba da uradim bazu podataka u SQL Server-u 2008 R2. Imam jedan problem oko koda, napravio sam bazu i kod koda gde sam kreirao proceduru za unos podataka prijavljuje gresku koju ja ne mogu nikako da izvalim.


Kod izgleda ovako:

create procedure insert_Zaposleni (
@JMBG nvarchar (13),
@ImePrezime nvarchar (70),
@GodinaRođenja date,
@rez nvarchar (50) out
)

as
begin
begin transaction
insert into Zaposleni (JMBG,ImePrezime,GodinaRođenja)
values (@JMBG,@ImePrezime,@GodinaRođenja)
if @@ERROR<>0
begin
rollback transaction
set @rez='Greska pri unosu u tabelu'
end
else
begin
commit transaction
set @rez='Uspesan unos podataka u tabelu'
end

end
go


Gde gresim ljudi? I moze li neko ceo kod da mi pogleda da vidi dal je dobro. Kapiram da ljudima koji znaju ne treba mnogo i da odma vide u cemu je problem. Poludeo sam, ne znam dal SQL Server baguje ili ja gresim. Rekao bih da je kod u redu. :confused:

Todors
24.1.2012, 20:55
Možda ne bi bilo loše da nam i tu grešku pokažeš, jer bih nam tako svakako bilo lakše da uočimo problem.

Ja jedino što sam primetio da nigde nisi koristio ;, nakon završetka iskaza. Mada nisam siguran da to može da bude problem u sql-u.

Vidim da imaš i dve begin naredbe, mislim da ti je samo jedna dovoljna.

Aleksandar1987
24.1.2012, 21:07
Zaboravih to.

http://i44.tinypic.com/2ylpnv6.jpg

Todors
24.1.2012, 21:41
Jel imaš neki kod iznad te procedure.
Probaj da obrišeš sve što imaš iznad, trebalo bi da proradi.

Aleksandar1987
24.1.2012, 21:57
Pa imam kreirane tabele.
I imam pitanje, da li mi je suvisno gore jedno begin i jedno end dole?

Todors
24.1.2012, 22:00
Izvršavaj odvojeno upite, pošto vidim da ih nemaš puno ili vodi računa kako si ih razdelio. Vidim da ti fali ';', dobra je praksa da sa njim uvek zatvaraš iskaze.

Odgovor na pitanje je DA,

ali to nije problem na koji ti ukazuje sql.

Aleksandar1987
24.1.2012, 22:10
Pa gde bi gore trebao sve da stavim ';'?
Inace ubacujem liniju po liniju koda. Oznacim jednu liniju koda tj jedan deo koji je npr za jednu tabelu pa Execute i tako do kraja celog koda.

Todors
24.1.2012, 22:18
Probaj ovako.


create procedure insert_Zaposleni (
@JMBG nvarchar (13),
@ImePrezime nvarchar (70),
@GodinaRođenja date,
@rez nvarchar (50) OUTPUT
)

as
begin transaction
insert into Zaposleni (JMBG,ImePrezime,GodinaRođenja)
values (@JMBG,@ImePrezime,@GodinaRođenja)
if (@@ERROR<>0)
begin
rollback transaction
set @rez='Greska pri unosu u tabelu'
end
else
begin
commit transaction
set @rez='Uspesan unos podataka u tabelu'
end


Malo sam se ja prešaltao sa mysql na sql :kreza:, u sql je ';' kolko vidim operator end :)

zokocx
24.1.2012, 22:45
Pa gde bi gore trebao sve da stavim ';'?
Inace ubacujem liniju po liniju koda. Oznacim jednu liniju koda tj jedan deo koji je npr za jednu tabelu pa Execute i tako do kraja celog koda.

MS SQL Server Menagment Studio je dosta nezgrapan alata, dobar je za ucenje ali moras stvarno da pazis, a greska koju ti prijavljuje znaci da CREATE PROCEDURE nije prva linija u batchu, jer svaki put kad ti uradis Execute ono odradi sve tamo sto ima a ako ti nesto dodas ono i to sto je ostalo opet odradi i to novo, tako lepo Ctrl+A i dugme Delete i probaj opet jer po gresci ti javlja da nesto imas pre tog dela koda sto probas da izvrsis. I stavljaj kod od pocetka prozora ne na sredini jer nesto moze gore da ti promakne/sakrije.

A uzgred begin = { end = } (glupa visual basic sintaksa tj. jos od prastarog basica pu pu pu) a ; je samo kraj cele naredbe a i nemora.

Aleksandar1987
24.1.2012, 23:18
MS SQL Server Menagment Studio je dosta nezgrapan alata, dobar je za ucenje ali moras stvarno da pazis, a greska koju ti prijavljuje znaci da CREATE PROCEDURE nije prva linija u batchu, jer svaki put kad ti uradis Execute ono odradi sve tamo sto ima a ako ti nesto dodas ono i to sto je ostalo opet odradi i to novo, tako lepo Ctrl+A i dugme Delete i probaj opet jer po gresci ti javlja da nesto imas pre tog dela koda sto probas da izvrsis. I stavljaj kod od pocetka prozora ne na sredini jer nesto moze gore da ti promakne/sakrije.

A uzgred begin = { end = } (glupa visual basic sintaksa tj. jos od prastarog basica pu pu pu) a ; je samo kraj cele naredbe a i nemora.

Cekaj, ceo kod sam kopirao u word da imam. Ajde sad cu da udjem u SQL SMS i ceo kod da kopitam ponovo u novu bazu. I CTRL+A i onda sve Execute? Jesi mislio tako da radim ili?

zokocx
25.1.2012, 1:08
Ne, nego po screenshotu sto si stavio, vidis kako imas mesta pre
create procedure insert_Zaposleni (
i kako je ta linija podvucena crvenom linijom sto znaci da ili nije dobro napisana linija ili nesto se nalazi pre pa mu smeta, tako da uvek stavi kod koji hoces da izvrsis da pocinje od levog gornjeg coska (od pocetka) a ne na sredini prozora.

Probao sam da testiram i tvoju proceduru i tako isto kako je Todors napisao, tako da jedino to moze da bude greska.

Evo ti i verzija SQL mada mislim da to nema veze

Microsoft SQL Server 2008 (SP2) - 10.0.4064.0 (X64) Feb 25 2011 13:56:11 Copyright (c) 1988-2008 Microsoft Corporation Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

ovo vidis sa select @@version; i execute

Aleksandar1987
25.1.2012, 1:35
Pa ne mogu ja druze da stavim ovu liniju koda na samom pocetku, moram pre ove linije da krejiram bazu, moram tabele da ubacim pa tek onda ovu liniju koda. :confused:

Todors
25.1.2012, 1:42
Pa prvo kreiraj bazu i tabele pa tek onda kreiraj proceduru. Rekao sam ti da uradiš jedno po jedno.

zokocx
25.1.2012, 14:02
A i sam je napisao da izvrsava komandu po komandu, kakva se sad zabluda stvorila :opanachke

Aleksandar1987
31.1.2012, 14:36
Ljudi imam sad jos jedno pitanje, ako imam u tabeli dva primarna kljuca, kako bi to izgledalo u kodu? Da li pije vodu ovo?


create table Licenca (
ZaposleniID int not null primary key,
ŠifraTipaAviona int not null primary key,
DatumDobijanja date not null,
);

EDIT: Video sam da ne moze da ima dvostruki primarni kljuc, ali ne znam kako ja to da dodam u samom kodu??? :confused:

zokocx
31.1.2012, 17:54
Evo sta kaze google iz prve, (u prva 2-3 posta imas to sto ti treba, valjda)
http://stackoverflow.com/questions/217945/can-i-have-multiple-primary-keys-in-a-single-table

Iskreno nikad nisam imao potrebu za 2 primarna kljuca, cak do sada sam mislio da to nije ispravno ili cak moguce izvesti (tj. da treba izbegavati).
Tj. kako kazu tu treba ti Composite Primary Key, mada opet zavisi sta hoce time da postignes.

Aleksandar1987
31.1.2012, 18:22
Rado bih radio sa jednim ali po idf1x semi koju imam, moram da imam ipak 2 primarna kljuca. Sto se tice ispravnosti ispravno je, samo sto se ne koristi cesto jer se gleda da se stvari uproste. Posto imam idf1x takav, moram po toj semi da radim, sta cu kad sam u tom delu ogranicen tako. :)

Aleksandar1987
5.2.2012, 14:39
Odradio sam bazu i sve radi super za sad jedino imam problem prilikom unosa datuma. Moze li mi neko reci gde gresim?

http://i41.tinypic.com/29bizps.jpg

Deusdies
6.2.2012, 0:29
Nisam neki SQL ekspert, ali koliko vidim tebi polje sa datumom ima tip VARCHAR, a ti ubacuješ DATE

Aleksandar1987
6.2.2012, 15:06
Kod prolazi prvi put ali nece i drugi. Ne znam zasto.. jel ima neko voljan da pogleda ceo kod i da vidi dal valja?