Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

datenbankseitige Berechnung

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Effie, 9 Januar 2013.

  1. Effie

    Effie Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

  3. Tommi

    Tommi Datenbank-Guru

    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
     
  4. Effie

    Effie Benutzer

    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
     
  5. ukulele

    ukulele Datenbank-Guru

    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?
     
  6. Effie

    Effie Benutzer

    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 ?
     
  7. ukulele

    ukulele Datenbank-Guru

    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.
     
  8. Effie

    Effie Benutzer

    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?
     
  9. akretschmer

    akretschmer Datenbank-Guru

    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
     
  10. Effie

    Effie Benutzer

    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?
     
  11. akretschmer

    akretschmer Datenbank-Guru

    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
     
  12. ukulele

    ukulele Datenbank-Guru

    Lesen hilft auch enorm weiter, da steht doch fast wörtlich: Eine berechnete Spalte kann nicht in einer anderen berechneten Spalte verwendet werden.
     
  13. Effie

    Effie Benutzer

    Ja, das hab ich wohl auch gelesen, deswegen die Frage ob ich das umgehen kann.:)

    Und Andreas, vielen Dank das funktioniert soweit :)
     
  14. akretschmer

    akretschmer Datenbank-Guru


    Okay.

    Frage, vielleicht kann das mal jemand kurz beantworten: solch 'berechnete Spalten' sind faktisch ein VIEW, wie man es von anderen DB's kennt, oder?


    Andreas
     
  15. ukulele

    ukulele Datenbank-Guru

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden