[MS-SQL]DEFAULT verwijzen naar andere tabel*

Pagina: 1
Acties:

  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 27-08-2021

CaptBiele

No Worries!

Topicstarter
Ik heb reeds een werkende applicatie, waarbij oa een totaalprijs opgevraagd wordt. Nu is dit één kolom, maar dient deze gesplitst te worden in 3 kolommen.

de structuur ziet er dan zo uit:
code:
1
2
3
4
5
TABEL1
deelprijs1       deelprijs2        totaalbedrag

TABEL2
deelprijs1       deelprijs2

De waarden van de kolommen deelprijs1 en deelprijs2 uit TABEL1 worden dus gehaald uit TABEL2.
En vervolgens moet de waarde van totaalbedrag de som zijn van deelprijs1 en deelprijs2.
Ik moet namelijk altijd kunnen zien welk waarde een deelprijs toen had, zodat ik de velden moet toevoegen aan TABEL1.

De oplossing zou zijn als ik bijvoorbeeld een default waarde kan specificeren naar een andere tabel. Dan blijven de waarden van de kolommen altijd up-to-date, maar ik weet niet of dit mogelijk is....
Indien dit niet kan, zal ik bij het updaten/inserten alsnog de waarden moeten ophalen (al weet ik nog niet precies hoe?!)

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je zult een trigger moeten maken die dit voor je doet. Welke database gebruik je precies?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 27-08-2021

CaptBiele

No Worries!

Topicstarter
P_de_B schreef op woensdag 05 oktober 2005 @ 11:04:
Je zult een trigger moeten maken die dit voor je doet. Welke database gebruik je precies?
SQL 2000

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:11
Ik snap de bedoeling niet goed...
Kan je even wat meer toelichting geven in wat die 2 tabellen precies zijn ?

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 27-08-2021

CaptBiele

No Worries!

Topicstarter
whoami schreef op woensdag 05 oktober 2005 @ 11:41:
Ik snap de bedoeling niet goed...
Kan je even wat meer toelichting geven in wat die 2 tabellen precies zijn ?
Het belangrijkste is tabel1. Momenteel staat er alleen het totaalbedrag vermeld. Dit totaalbedrag is de som van de waarden uit tabel2.
Ik wil echter van elk item kunnen zien wat de deelbedragen op dat moment waren, dus moet ik deze velden toevoegen aan tabel1. Anders kan ik niet meer achterhalen hoe het bedrag is opgebouwd indien een deelbedrag uit tabel2 wordt gewijzigd.

Ik hoop dat het nu duidelijker is.

  • lier
  • Registratie: Januari 2004
  • Laatst online: 09:17

lier

MikroTik nerd

Waar wil je je historie op slaan ?
Waarom wil je een berekend veld in een tabel op slaan ?
Waarom wil je gegevens wijzigen, terwijl je deze nog nodig hebt ?

Waarom begrijp ik nog helemaal niets van je vraag ?

Eerst het probleem, dan de oplossing


Verwijderd

Uhm .... het is geen goed idee om waarden uit 1 tabel in een andere over te nemen of om berekende waarden op te nemen in je database, tenzij je dat heel bewust doet. Ik het algemene geval zou ik dus de gegevens ophalen in een query met een JOIN, zodat je wel alle gegevens hebt als resultaat van de query, maar de gegevens bij de juiste entiteit blijven opgeslagen in de database.

  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 27-08-2021

CaptBiele

No Worries!

Topicstarter
lier schreef op woensdag 05 oktober 2005 @ 12:01:
Waar wil je je historie op slaan ?
Waarom wil je een berekend veld in een tabel op slaan ?
Waarom wil je gegevens wijzigen, terwijl je deze nog nodig hebt ?

Waarom begrijp ik nog helemaal niets van je vraag ?
zie boven
backwards compatibility
?! gegevens veranderen weleens ?!
dat weet ik ook niet. Ik kan het niet duidelijker formuleren.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Er zijn inderdaad wat bezwaren om berekende velden op te slaan, maar heb je het echt nodig zul je het met een trigger moeten doen.

Het is me niet duidelijk wanneer het precies moet plaatsvinden. Daarnaast is het denk ik niet de totale tabel die je toont, dus een exact voorbeeld kan ik je niet geven. Een voorbeeldje van de code:
SQL:
1
2
3
4
5
CREATE TRIGGER [triggernaam] ON tabel1
AFTER INSERT, UPDATE
AS
UPDATE tabel1
SET totaalprijs = etc

In books online staat uitgebreide informatie over triggers. O.a. over de inserted en deleted tabellen die je kan gebruiken om de goede records / waarden te gebruiken.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 27-08-2021

CaptBiele

No Worries!

Topicstarter
P_de_B schreef op woensdag 05 oktober 2005 @ 13:11:
Er zijn inderdaad wat bezwaren om berekende velden op te slaan, maar heb je het echt nodig zul je het met een trigger moeten doen.

Het is me niet duidelijk wanneer het precies moet plaatsvinden. Daarnaast is het denk ik niet de totale tabel die je toont, dus een exact voorbeeld kan ik je niet geven. Een voorbeeldje van de code:
SQL:
1
2
3
4
5
CREATE TRIGGER [triggernaam] ON tabel1
AFTER INSERT, UPDATE
AS
UPDATE tabel1
SET totaalprijs = etc

In books online staat uitgebreide informatie over triggers. O.a. over de inserted en deleted tabellen die je kan gebruiken om de goede records / waarden te gebruiken.
Ik weet (nog) niet zo goed wat de bezwaren zijn van berekende velden, maar ik hoef niet per se het totaalbedrag in de kolom te berekenen. Ik kan het ook in de applicatie zelf optellen. Als de kolom maar aanwezig is voor backwards compatibility.

De totale tabel bevat nog heel veel andere kolommen, maar zijn voor dit voorbeeld niet relevant. Ik neem aan dat het voor het opstellen van de triggers ook niet uitmaakt.
Ik ga me in ieder geval verdiepen in triggers.

Tnx alvast voor deze push in de juiste richting. :)

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Ik sluit me even volledig aan bij lier. Ik snap ook niet veel van het probleem (maar dat komt misschien ook omdat ik eigenlijk allang in m'n bedje moet liggen) ;)

Kan tabel1 niet gewoon een view zijn op tabel2? Of, als je zowel gegevens uit tabel1 als tabel2 nodig hebt, waarom dan niet een view die deze gegevens joined?
Of kom je dan in de knoei met je bestaande applicatie?

Today's subliminal thought is:

Pagina: 1