SQL - več tabel - primary key

Problemi z drugimi jeziki kot so c++, cgi, java, itd.
Odgovori
domen80
Prispevkov: 181
Pridružen: 23.01.2008 16:37:19

SQL - več tabel - primary key

Odgovor Napisal/-a domen80 » 11.08.2010 02:18:51

Zdravo,

uporabljam stored proceduro. Ali je stored proceduro mogoče napisati na takšen način, da ti več podatkov shrani v enako stolpec.
Imam stolpec Column1 v katerega hočem shranit istočasno več podatkov in hkrati še v druge tabele je za ta primer primerna stored procedura,
ki omogoča relacijsko povezavo.

Imam več tabel:
Users

PaymentOptions

in

PaymentDetails.


Vse te podatke povežem s pomočjo stored procedure.


V PaymentDetails pa imam
UserId, Id payment, Attribute, Value


S stored proceduro povežem vse ključe med sabo.

No zdaj pa je en problem...

V tabeli paymentdetails imam vse podatke shranjene v en stolpec.


Delam v C#
Na kakšen način programu povedati kako shraniti.

To se da v C# brez problema, v storedu proceduri je pa mal zajebano, vendar se mi zdi da je še najbolj pravilno.

V stored proceduri bi rad naredil, da bi v stolpec Column1 istočasno shranlo 5 različnih z enim samim klikom.

Trenutno mam tako narejeno:
Create table Table_1 (id_uporabnika varchar(50))
declare @input varchar(200) set @input = '1234,2345,3456,12,31415,435'

if right(rtrim(@input),1) <> ',' set @input = @input + ','

declare @stevc smallint
declare @del_stringa varchar(50)

set @stevc = patindex('%,%',@input)
while @stevc <> 0
begin
set @del_stringa = left(@input, @stevc-1)
insert into Table_1
select @del_stringa
set @input = stuff(@input,1,@stevc,'')
set @stevc = patindex('%,%',@input)
end
select * from Table_1


To deluje. Kako v C# napišem, da bom namesto teh številk: '1234,2345,3456,12,31415,435' , uporabil katere druge podatke.


Primarne ključe ni problem dobit, ker uporabiš enostavno samo @@IDENTITY, problem je ker ne vem kako v C# povedat iz katere textboxa te podatke črpa.


Ima kdo idejo?

Lp

Fortuna
Prispevkov: 1097
Pridružen: 26.06.2004 09:59:52

SQL - več tabel - primary key

Odgovor Napisal/-a Fortuna » 12.08.2010 13:19:00

Tega si se lotil čudno ali pa ne razumem.
Zakaj sploh uporabljaš stored proceduro, če imaš v njej samo select večih tabel, ki jih združiš več tabel z istim klučem.
Napiši select takšen, kot da nimaš stored procedure in ga objavi. Ti bomo potem lažje pomagali.
lp.

domen80
Prispevkov: 181
Pridružen: 23.01.2008 16:37:19

SQL - več tabel - primary key

Odgovor Napisal/-a domen80 » 12.08.2010 17:46:12

Tega si se lotil čudno ali pa ne razumem.
Zakaj sploh uporabljaš stored proceduro, če imaš v njej samo select večih tabel, ki jih združiš več tabel z istim klučem.
Napiši select takšen, kot da nimaš stored procedure in ga objavi. Ti bomo potem lažje pomagali.
lp.
zdej mi pa več ni nič jasno... vsi pravijo da moram imet narejeno relacijsko povezavo če hočem to imet urejeno za naprej.

trenutno mam narejeno tko da ko shranim osnovne podatkev tbl_payment, najdem zadnji shranjen ključ v tbl_payment s query MAX.....
potem pa v tbl_paymentdetails zapišem zadnji ključ iz tabele tbl_payment in to mislim da je napačno.

mogu bi shranit vse podatke z enim samim klikom in ne da najprej shrani v prvo tabelo in potem v drugo.

kaj meniš glede na izkušnje?

matej
Prispevkov: 1837
Pridružen: 03.01.2002 20:40:38

SQL - več tabel - primary key

Odgovor Napisal/-a matej » 13.08.2010 07:23:29

zdej mi pa več ni nič jasno... vsi pravijo da moram imet narejeno relacijsko povezavo če hočem to imet urejeno za naprej.
Malo osnov relacijskih podatkovnih baz bo potrebno "naštudirat". V relacijskem svetu se podatki povezujejo s pomočjo relacij, ki so na podatkovnih bazah implementirani v oblikih tujih ključev (foreign key). Torej Podatke se med seboj NE povezuje s pomočjo stored procedure, pač pa s pomočjo tujih ključev. Na ta način potem baza poskrbi za konsistentnost podatkov.
mogu bi shranit vse podatke z enim samim klikom in ne da najprej shrani v prvo tabelo in potem v drugo.
Iz tega ugibam da bi rad vse naredil v eni transakciji. Kar pa v ničemer ne preferira da moraš te stvari narediti znotraj procedure. Procedura je samo "cukerček" da imaš že celo skripto na serverju shranjeno in je tako manj prometa med "odjemalcem" in dbstrežnikom, ne vpliva pa procedura na transakcijski del.

Sedaj pa k vsebini samega vprašanja. Le-to je postavljeno tako zmedeno, da je verjetno nemogoče iz napisanega razvozlati kaj sploh hočeš in sprašuješ saj v zaporednih stavkih negiraš sam sebe.
... V PaymentDetails pa imam
UserId, Id payment, Attribute, Value ..
... in potem dalje pišeš...
V tabeli paymentdetails imam vse podatke shranjene v en stolpec.
Kako imaš podatke shranjene v en sam stolpec, če si pa par vrstic prej napisal da imaš 4 stolpce? Ali imaš malo težave s terminologijo, ali pa...
Ali bi lahko prilepil dejansko strukturo tabel kot jo imaš v bazi (ponavadi to na forumih počnemo z objavo create/table stavkov) da se bo dalo sploh razumeti tvoje dejansko stanje?
To se da v C# brez problema, v storedu proceduri je pa mal zajebano, vendar se mi zdi da je še najbolj pravilno.
A bi pripel košček C# kode, kjer se to da "brez problema", da bomo razumeli kaj sploh hočeš narediti? In ti tako pomagali tudi proceduro optimalno spisat (v primeru da je procedura sploh potrebna in smiselna) - čeprav naj v isti sapi povem da je filozofija jezika (c# in SQL) nekoliko drugačna saj je slednji "set oriented"... in direktne "preslikave" niso zaželjene (optimalne).

Ko boš torej podrobneje specificiral tvoje dejansko stanje, in pa točno povedal kaj sploh hočeš narediti, pa mislim da ti bomo zmogli pomagati. Natančno postavljanje vprašanj je pri forumih ključ do uspešnega odgovora.

Matej


Odgovori