Wenn ich zwei Spalten, A und B, des Datentyps Nvarchar (50), wo beide Geldwerte mit dem Währungscode (z. B. 100,00 USD), wie können Ich verwende nur den Dezimalteil in Trigger- oder Prozedurberechnungen?SQL Server arbeitet mit Dezimalteil einer Zeichenfolge in Berechnungen
Beispielsweise kann ein Nach-Trigger Insert, das den Wert B von A subtrahiert, wobei A = '300,00 USD' und B = '299,50 USD':
... AS
deklariere @a nvarchar (50);
deklarieren @ b nvarchar (50);
Deklarieren @ans Dezimal (10,2);
Wählen Sie @ a = i.A von eingefügtem i;
Wählen Sie @ b = i.B von eingefügtem i;
BEGIN
Jetzt möchte ich @ans = @a finden - @b.
END
Was erschwert es, dass ein Teil des realen Szenarios ist, wird es in einem Verfahren zu tun, das für eine Reihe von Werten testet, wo ich verschiedene Tabellen und Ausgang mit einem „wählen verbinden. ... in ".
Warum die Währung nicht in einer separaten Spalte speichern? –
* Verwenden Sie kein Textfeld für Dezimalzahlen. Das Problem ist die Abfrage, nicht SQL Server. Wie erwarten Sie mathematische Operationen mit * text *? Führen Sie keine Operationen mit Währungen durch. Was nützt es, * Pfund * von * Dollar * abzuziehen? –
Das wäre ideal. Leider ist dies für ein Universitätsprojekt und die Normalisierung muss eingehalten werden. Die spezifische Tabelle ist für die Buchung und ich versuche, einen Gesamtpreis zu berechnen.Das dritte Normalformular lässt nicht zu, dass ein Nicht-Prime-Attribut von einem anderen Nicht-Prime-Attribut abhängt, was der Fall wäre, wenn ich die Währung in einer separaten Spalte speichern würde. – Nazgul