/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
SELECT med variable?
Fra : Stefan Kristensen


Dato : 25-02-05 14:51

Hej NG.

Jeg har to tabeller:

HumanResources:
UserID, Name, Email

Updates:
UserID, Field, Value

Så har I jo nok regnet ud hvad der skal ske Hvis der i Updates ligger
f.eks. TU01, Name, Svend, ja så skal brugeren TU01's Name felt ændres til
Svend. Og ligger der i Ipdates TU01, Email, svend@hej.dk, så skal Email
feltet ændres.
Det er ikke altsid begge felter findes i Updates. Jeg kan selvfølgelig lave
en SELECT på først Name og så Email, men kan man ikke lave noget smart a la
følgende (jeg har brugerens userid fra et andet sted, så den er på plads):

SELECT @Name=Value, @Email=Value
FROM Updates
WHERE UserID='Svend' AND Field IN('Name', 'Email')

UPDATE HumanRsources SET [Name]=@Name, Email=@Email WHERE UserID='Svend'

Det kunne jo være en løkke med Name og Fields og noget EXEC, men kan man
noget lignende ovenstående?

Mvh
Stefan



 
 
Jens Gyldenkærne Cla~ (25-02-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 25-02-05 15:07

Stefan Kristensen skrev:

> Jeg har to tabeller:

Hvilket databasesystem?

> SELECT @Name=Value, @Email=Value
> FROM Updates
> WHERE UserID='Svend' AND Field IN('Name', 'Email')

Her vil du (forudsat at syntaksen i øvrigt virker) få to poster med
samme værdi i @Name og @Email (navnet i den ene post og mailen i den
anden).

Jeg tvivler på at du kan lave en fornuftig update af én bruger med alle
felter samtidig ud fra din nuværende tabelstruktur.

Men du kan godt opdatere på den anden led - det vil sige et bestemt felt
for alle brugere. Det kan gøres som her (i MSSQL):

UPDATE h
SET [Name]= Value
FROM HumanRsources h INNER JOIN Updates u
   ON h.UserID = u.UserID
WHERE u.Field = 'Name'

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Stefan Kristensen (25-02-2005)
Kommentar
Fra : Stefan Kristensen


Dato : 25-02-05 17:24

> > Jeg har to tabeller:
>
> Hvilket databasesystem?

Ups MS SQL 2000


> Jeg tvivler på at du kan lave en fornuftig update af én bruger med alle
> felter samtidig ud fra din nuværende tabelstruktur.

Jeg bruger også to forskellige selects for at få de to variable som jeg så
bruger i en update til sidst. Jeg ville bare høre om der der vare en nemmere
måde at gøre det på. Det kan nemlig være at jeg skal opdatere flere felter i
humanResources tabellen på samme måde.


> Men du kan godt opdatere på den anden led - det vil sige et bestemt felt
> for alle brugere. Det kan gøres som her (i MSSQL):
>
> UPDATE h
> SET [Name]= Value
> FROM HumanRsources h INNER JOIN Updates u
> ON h.UserID = u.UserID
> WHERE u.Field = 'Name'

Nu skal jeg kun opdatere én bruger ad gangen, men jeg vil lige gemme det i
min idébog hvis jeg skulle få brug for det.

Jeg bukker og takker

Mvh
Stefan



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste