2009-04-17 3 views

Antwort

96

Sie sind gleich. Numerisch ist funktional äquivalent zu dezimal.

MSDN: decimal and numeric

+3

Funktionelle Äquivalenz ist nicht dasselbe wie Gleichheit. In den Folien des Tauchlehrers des Kurses MS6232A wurde hinzugefügt, dass sie fast identisch sind. Zur gleichen Zeit wird von Microsoft keine Empfehlung zu dem einen oder anderen gemacht (jedoch ist DECIMAL sinnvoller, da es sich um einen Standard-Datentyp anstelle eines älteren Datentyps aus Sybase handelt). Ich frage mich immer noch, was der wirkliche Unterschied (hinter den Bildschirmen) ist :-). – vstrien

+22

@vstrien: Der einzige Unterschied, den ich finden kann, ist, dass in der SQL-92-Norm "dezimal" genau so genau ist wie deklariert, während "numerisch" mindestens so genau ist wie deklariert. In SQL Server sind beide genau so genau wie deklariert, d. H. Es wird nicht die Flexibilität für "numerisch" verwendet, die der Standard zulässt. – Guffa

+14

Beachten Sie jedoch, dass SQL Server sie nicht als austauschbar behandelt: Wenn Sie beispielsweise eine "übergeordnete" Spalte im Format "DECIMAL (18,0)" haben und versuchen, einen ** Fremdschlüssel hinzuzufügen ** Wenn Sie auf eine Spalte im Format "NUMERIC (18,0)" verweisen, erhalten Sie den Fehler "Spalte" "ist nicht derselbe Datentyp wie die referenzierende Spalte" . 'im Fremdschlüssel' Sie müssen beide NUMERISCH sein (x, y) oder beide DECIMAL (x, y) sein. –

10

Meines Wissens gibt es keinen Unterschied zwischen NUMERIC und DECIMAL-Datentypen. Sie sind auch zueinander und beide können benutzt werden. Die Datentypen DECIMAL und NUMERIC sind numerische Datentypen mit fester Genauigkeit und Skalierung.

Edit:

auf wenige Kollegen Sprechen vielleicht hat seine etwas mit DECIMAL ist die ANSI SQL-Standard und NUMERIC ist eine Mircosoft als mehr bevorzugt zu tun, häufig in Programmiersprachen. ... Vielleicht;)

+0

Re die Bearbeitung: Nein - siehe @ JoakimBackman's Antwort oben - er zitiert den SQL-Standard mit NUMERIC und DECIMAL. – DaveBoltman

37

Dies ist, was dann SQL2003-Standard (§ 6.1 Datentypen) sagt über die beiden:

<exact numeric type> ::= 
    NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ] 
    | DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ] 
    | DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ] 
    | SMALLINT 
    | INTEGER 
    | INT 
    | BIGINT 

... 

21) NUMERIC specifies the data type 
    exact numeric, with the decimal 
    precision and scale specified by the 
    <precision> and <scale>. 

22) DECIMAL specifies the data type 
    exact numeric, with the decimal scale 
    specified by the <scale> and the 
    implementation-defined decimal 
    precision equal to or greater than the 
    value of the specified <precision>. 
+0

Sie haben hier einen Link? – gbn

+2

Wiscorp hat eine Entwurfsversion des Standards zum Download (http://www.wiscorp.com/sql_2003_standard.zip), wenn Sie die finale Version wollen, müssen Sie es kaufen (http://en.wikipedia.org/wiki/SQL2003 # Dokumentation_Verfügbarkeit). –

+6

Beachten Sie, dass dies der SQL-Standard ist, nicht eine Beschreibung der Implementierung durch SQL Server. – Guffa

0

Sie Synonyme sind, sind keine Unterschiede bei all.Decimal und Numerische Datentypen numerische Datentypen mit fester Genauigkeit und Skalierung.

-- Initialize a variable, give it a data type and an initial value 

declare @myvar as decimal(18,8) or numeric(18,8)----- 9 bytes needed 

-- Increse that the vaue by 1 

set @myvar = 123456.7 

--Retrieve that value 

select @myvar as myVariable 
0

Die Antwort von Joakim Backman ist spezifisch, aber das kann zusätzliche Klarheit bringen.

Es gibt einen kleinen Unterschied. Laut SQL for Dummies, 8. Ausgabe (2013):

Der DECIMAL-Datentyp ähnelt NUMERIC. ... Der Unterschied ist , dass Ihre Implementierung eine höhere Genauigkeit angeben kann, als Sie angeben - wenn ja, verwendet die Implementierung die größere Genauigkeit. Wenn Sie keine Genauigkeit oder Skalierung angeben, verwendet die Implementierung die Standardwerte , wie beim Datentyp NUMERIC.

Es scheint, dass der Unterschied auf einige SQL-Implementierungen in der Datenintegrität ist. DECIMAL ermöglicht einen Überlauf von dem, was auf der Grundlage einiger Systemstandardwerte definiert ist, wobei NUMERIC dies nicht tut.