2009-04-17 2 views

ответ

96

Они одинаковы. Числовое функционально эквивалентно десятичному.

MSDN: decimal and numeric

+3

Функциональная эквивалентность не совпадает с равенством. Фактически, в слайдах инструктора курса MS6232A есть комментарий, добавленный, что они ПОЛНОСТЬЮ то же самое. В то же время Microsoft не рекомендует делать какие-либо рекомендации относительно того или иного (однако DECIMAL имеет больше смысла, поскольку это тип данных стандарта вместо устаревшего типа данных из Sybase). Все еще интересно, какая реальная разница (за экранами) :-). – vstrien

+22

@vstrien: Единственное отличие, которое я могу найти, это то, что в стандарте 'decimal' SQL-92 точно указано * точно так же, как указано, а' numeric' - * как минимум * так же точно, как указано. В SQL Server оба точно такие же точные, как и объявленные, т. Е. Он не использует гибкость для «числовых», что позволяет стандарт. – Guffa

+14

Учтите, однако, что SQL Server не рассматривает их как взаимозаменяемые: если, например, у вас есть «родительский» столбец в формате «DECIMAL (18,0)», и вы пытаетесь добавить ** внешний ключ ** для него, который ссылается на столбец в формате «NUMERIC (18,0)», вы получите сообщение об ошибке «Column» '- это не тот же тип данных, что и ссылочный столбец' . 'in foreign key' '. Они оба должны быть NUMERIC (x, y), или оба должны быть DECIMAL (x, y). –

10

Насколько мне известно, нет никакой разницы между числовыми и DECIMAL типов данных. Они являются синонимами друг друга, и каждый может быть использован. Типы DECIMAL и NUMERIC - это числовые типы данных с фиксированной точностью и масштабированием.

Edit:

Говоря несколько коллег, может быть, его что-то делать с DECIMAL является стандартом ANSI SQL и NUMERIC быть один Mircosoft предпочитает, как его чаще встречаются в языках программирования. ... Может быть;)

+0

Редактирование: Нет - см. Ответ @ JoakimBackman выше - он цитирует стандарт SQL как с NUMERIC, так и с DECIMAL. – DaveBoltman

37

Это то, что тогда стандарт SQL2003 (§6.1 типы данных) говорит о двух:

<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

У вас есть ссылка для этого, пожалуйста? – gbn

+2

Wiscorp имеет черновик версии стандарта для скачивания (http://www.wiscorp.com/sql_2003_standard.zip), если вы хотите, чтобы окончательная версия вам была куплена (http://en.wikipedia.org/wiki/SQL2003 # Documentation_availability). –

+6

Обратите внимание, что это стандарт SQL, а не описание того, как SQL Server его реализует. – Guffa

0

Они являются синонимами, никакой разницы в all.Decimal и числовых типов данных не являются числовыми типы данных с фиксированной точностью и масштабированием.

-- 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

Ответ Жоакима Бэкмана специфичен, но это может принести ему дополнительную ясность.

Существует незначительная разница. В соответствии с SQL For Dummies, 8-е издание (2013):

Тип данных DECIMAL аналогичен NUMERIC. ... Разница в заключается в том, что ваша реализация может указать точность, превышающую то, что вы задаете - если это так, реализация использует большую точность. Если вы не указываете точность или масштаб, реализация использует значения по умолчанию , как и для типа NUMERIC.

кажется, что разница в некоторых реализаций SQL находится в целостности данных. DECIMAL позволяет переполнять из того, что определено на основе некоторых системных значений по умолчанию, где NUMERIC нет.