Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 5 odgovora
  • 2.578 pregleda

Najnovija ↓

Update podtaka via StoredProcedure 25.07.2009. u 00:45 · pre 210 meseci #1
Pozdrav svima,

imam jedan naizgled(bar meni) trivijalan problem:

Imam proceduru koja radi update podataka, recimo setuje neki status uposlenika.
Ja bih htio to odradim tako da u SP proslijedim listu ID-eva uposlenika i da odradim update i to ovako:

@sqlWhere nvarchar(100)

as

update uposlenici set Aktivan = 1
where uposlednikid in (@sqlWhere)

Naravno UposlenikID je int, autoincrement, PK i sta god da proslijedim update padne

Primjer

recimo da sma iz code-a proslijedio sqlWhere kao '21', '23','120'

Gornji dio upodate pada! Ali ako direktno kucam u Query

update uposlenici set Aktivan = 1
where uposlednikid in ('21','23','120')

onda radi.

Mozeli neko pomoci kako da setujem ovaj ulazni parametar?

LP
Re: Update podtaka via StoredProcedure 25.07.2009. u 11:07 · pre 210 meseci #2
Ako bas moras tako onda mozes da napises nesto kao

Code:

declare @sql nvarchar(255)

set @sql = 'update uposlenici set Aktivan = 1 where uposlednikid in (' + @sqlWhere + ')'

exec @sql


Mada bi bilo bolje da niz prosledis kao xml, parsiras u proceduri u privremenu tabelu...
Potpis
Every hamster has his day.
Re: Update podtaka via StoredProcedure 26.07.2009. u 09:50 · pre 210 meseci #3
zar nije bolje da primas jedan ID, a proceduru pozivas u petlji?
To je, ako se ne varam, najopstije resenje... Ovde imas ogranicenje broja karaktera (100) , ili (255)... a i sve mi deluje kao hakeraj; a sa bazom se ne hakerise :-)
Potpis
Uhvatili ste me nespremnog
Re: Update podtaka via StoredProcedure 26.07.2009. u 12:42 · pre 210 meseci #4
Citat:

zar nije bolje da primas jedan ID, a proceduru pozivas u petlji?
To je, ako se ne varam, najopstije resenje... Ovde imas ogranicenje broja karaktera (100) , ili (255)... a i sve mi deluje kao hakeraj; a sa bazom se ne hakerise :-)


Nije hakeraj. Objasnit cu ti u cemu je bio problem iako sam ga drugacije riejsio:

Apliakcija koju trenutno radim funkcionise na sledecm principu:

Sef Odjela moze da aktivira radnike koji u nekom trenutku mogu da rade neke operacije. Recimo On za danas moze da odredi 5 radnika koji ce moci da rade storno racuna. Da bi to uradio, dobije listu svih radnika koji su mu na raspolaganju i klikom na svaki pamti se id radnika. Posto ja pravim program, znam da sigurno nikad nece imat vise od 10 radnika :) i zbog toga to ogranicenje od 100 karaktera...

Posle se izvrsavanjem ove proc radnici aktiviraju i to je to...Nikakav hakeraj, to je za malu djecu. Ja upravo radim u drugom smjeru :)

To je bila poenta problema...

Rijesio sam to tako sto sam jednostavo iz code-a uradio update a ne preko sp...
Re: Update podtaka via StoredProcedure 26.07.2009. u 13:53 · pre 210 meseci #5
Citat:
M E N E: zar nije bolje da primas jedan ID, a proceduru pozivas u petlji?
To je, ako se ne varam, najopstije resenje... Ovde imas ogranicenje broja karaktera (100) , ili (255)... a i sve mi deluje kao hakeraj; a sa bazom se ne hakerise :-)


Ne bih se slozio ni po jednom pitanju. Pozivanje procedure iz DB layera u petlji je sto se optimizacije tice najgore resenje, posebno ako se baza i aplikacija nalaze na razlicitm masinama.
Sto se broja karaktera tice, samo sam lupio 255, uvek mozes da stavis nvarchar(max) i izbegnes taj problem.

Ja bih taj problem resio tako sto bih napravio proceduru koja prima xml. Brzo googlanje je vratilo link sa vrlo jednostavnim primerom: http://weblogs.asp.net/jgallow...-2005-with-xml-parameters.aspx trebalo bi da resi problem.
Potpis
Every hamster has his day.
Re: Update podtaka via StoredProcedure 28.07.2009. u 08:37 · pre 210 meseci #6
Po meni, resenje sa dinamickim SQLom koje je Fedya ponudio sasvim zadovoljava.

Drugo (a slicno) resenje je da napravi UDF koja parsira string sa vrednostima odvojenim zarezom a kao rezultat vraca tabelu, pa onda koristi ono sto je naveo u prvom mejlu.
Onda bi mogao da ima:

Code:

update uposlenici set Aktivan = 1
where uposlednikid in (select vrednost from dbo.my_parsing_UDF(@sqlWhere))
Potpis
http://www.montaznekuce.rs
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme