datenbankseitige Berechnung

Effie

Benutzer
Beiträge
13
Guten Morgen,
ich soll in MS SQL Berechnungen in der Datenbank durchführen.
SOBALD Wert a und Wert b in der Datenbank gespeichert werden, soll Wert C in der Datenbank berechnet werden.
Kann mir jemand weiterhelfen?
liebe grüße
Effie
 
Werbung:

Tommi

Datenbank-Guru
Beiträge
285
Hi,

einen Trigger halte ich hier für zu extrem. Man kann in Tabellen berechnete Spalten anlegen, die aus Werten der eigenen Zeile feste neue Werte berechnen.
Dafür brauchts keinen Trigger. Hier mal ein einfaches Beispiel bei der Tabellenanlage:

Code:
CREATE dbo.Tabelle1
     (     Nr int IDENTITY(1,1),
           A int,
           B in,
           C as A + B
     )

Viele Grüße,
Tommi
 

Effie

Benutzer
Beiträge
13
Danke für die Hilfe,

das Problem ist, dass ich mit Entity Framework arbeite und meine tabellen automatisch generiert wurden. Wie kann ich jetzt im nachhinein sagen, das c nicht (nur) ein integer sonder a+b sein soll?

lg
 

ukulele

Datenbank-Guru
Beiträge
4.579
Kannst du nicht über SQL Studio die Spalte mit ALTER TABLE DROP und ADD erst löschen und dann neu hinzufügen? Oder mag dein Framework keine manuellen Datenbankanpassungen?
 

Effie

Benutzer
Beiträge
13
Jaaaaa :) hat sehr gut funktioniert! Danke!!!

Ahem... Nur hab ich noch eine frage ... Wie regel ich das wenn c in einer anderen Tabelle gespeichert werden soll ?
 

ukulele

Datenbank-Guru
Beiträge
4.579
Dann musst du einen Trigger verwenden. Hier bietet sich aber auch an, die andere Tabelle (falls schon vorhanden) durch eine View zu erweitern, die diese Spalte berechnet.
 

Effie

Benutzer
Beiträge
13
Schon wieder Schwierigkeiten :(
Also in Tabelle 'Base' sollen werte a,b,c,d gespeichert werden:

a = b+c
(Das klappt auch soweit)
Aber wenn ich jetzt veruche :

d= a+b+c
Dann bekomme ich folgene Fehlermeldung: "Computed column 'a' in table 'Base' is not allowed to be used in another computed-column definition.

Kann mir jemand helfen?
 

akretschmer

Datenbank-Guru
Beiträge
9.420
Schon wieder Schwierigkeiten :(
Also in Tabelle 'Base' sollen werte a,b,c,d gespeichert werden:

a = b+c
(Das klappt auch soweit)
Aber wenn ich jetzt veruche :

d= a+b+c
Dann bekomme ich folgene Fehlermeldung: "Computed column 'a' in table 'Base' is not allowed to be used in another computed-column definition.

Kann mir jemand helfen?

Ich denke mal, du mußt das dann nur umschreiben, also da a=b+c ist ist dann d=b+c+b+c oder 2*(b+c).

Davon abgesehen ist das dann alles hochgradig redundant, also ich würde das SO NICHT machen.



Andreas
 

Effie

Benutzer
Beiträge
13
Ok,.. das war ein blödes Beispiel.
a = b+c
d= a +x+y

Dann bekomme ich folgene Fehlermeldung: "Computed column 'a' in table 'Base' is not allowed to be used in another computed-column definition.
Ich kann also das Ergebnis meiner berechneten Spalte 'a' nicht für eine weitere berechnete Spalte verwenden?
Wie kann ich das umgehen?
 

akretschmer

Datenbank-Guru
Beiträge
9.420
Ok,.. das war ein blödes Beispiel.
a = b+c
d= a +x+y

Dann bekomme ich folgene Fehlermeldung: "Computed column 'a' in table 'Base' is not allowed to be used in another computed-column definition.
Ich kann also das Ergebnis meiner berechneten Spalte 'a' nicht für eine weitere berechnete Spalte verwenden?
Wie kann ich das umgehen?

Im Prinzip wie eben erklärt: statt der Spalte a, die ja berechnet ist, die Berechnungsformel für diese Spalte angeben. Also b+c+x+y.

Andreas
 

ukulele

Datenbank-Guru
Beiträge
4.579
Lesen hilft auch enorm weiter, da steht doch fast wörtlich: Eine berechnete Spalte kann nicht in einer anderen berechneten Spalte verwendet werden.
 

Effie

Benutzer
Beiträge
13
Ja, das hab ich wohl auch gelesen, deswegen die Frage ob ich das umgehen kann.:)

Und Andreas, vielen Dank das funktioniert soweit :)
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.579
Theoretisch ja, praktisch weiß ich auch nicht genau wie sie umgesetzt sind. Eine View kannst du auch in einer anderen View abfragen (zumindest unter MSSQL), also scheinen hier Unterschiede zu existieren.
 
Oben