t-sql dezimaler Wert ändert Zuordnung
Frage
Warum wird die Select-Anweisung unten Rückkehr zwei verschiedene Werte?
declare @tempDec decimal
set @tempDec = 1.0 / (1.0 + 1.0)
select @tempDec, 1.0 / (1.0 + 1.0)
Lösung
Das ist in Ordnung für Literale wie 1.0, aber wenn Sie die Daten aus Tabellenspalten sind ziehen, müssen Sie die erste bewerten Nummer in Ihrer Gleichung werfen / konvertieren:
convert(decimal, [col1]) / ([col2] + [col3])
-oder -
convert(decimal(15, 2), [col1]) / ([col2] + [col3])
Andere Tipps
ich von einem Kollegen fand heraus, so wie ich dies geschrieben.
Sie müssen die Standardgenauigkeit und Maßstab angeben.
Das funktioniert in diesem Szenario: deklarieren @tempDec dezimal (3,2)
Von MSDN:
dezimal [(p [, s])] und numerisch [(p [, s])] Feste Genauigkeit und Skalierung Zahlen. Wenn höchste Präzision verwendet wird, sind die gültigen Werte von - 10 ^ 38 + 1 bis 10 ^ 38 - 1. Die SQL-92 Synonyme für dezimal sind Dec und Dec (p, s). numerisch ist funktional äquivalent zu dezimal.
p (Präzision) Die maximale Anzahl der Dezimalstellen, die sowohl nach links und rechts von dem Dezimalpunkt gespeichert werden können. Die Genauigkeit muss ein Wert von 1 durch die maximale Genauigkeit von 38 sein Die Standardgenauigkeit ist 18.
s (Skala) Die maximale Anzahl der Dezimalstellen, die rechts von dem Komma gespeichert werden können. Waage muss ein Wert von 0 bis p sein. Scale kann nur angegeben werden, wenn Genauigkeit angegeben ist. Die Standard-Skala ist 0; also 0 <= s <= p. Maximale Speichergrößen variieren, bezogen auf die Genauigkeit.