Câu trả lời:
Họ giống nhau. Số là chức năng tương đương với số thập phân.
MSDN: số thập phân và số
decimal
là chính xác như chính xác khi được công bố, trong khi numeric
là ít nhất chính xác như công bố. Trong SQL Server cả hai đều chính xác như được khai báo, tức là nó không sử dụng tính linh hoạt cho numeric
tiêu chuẩn cho phép.
Column '<referencedColumn>' is not the same data type as referencing column '<parentTable>.<parentColumn>' in foreign key '<yourKeyName>'
. Cả hai phải là NUMERIC (x, y) hoặc cả hai đều là DECIMAL (x, y).
decimal
là ít nhất chính xác như tuyên bố, trong khi đó numeric
là chính xác chính xác như công bố.
Đây là những gì sau đó tiêu chuẩn SQL2003 (§6.1 Kiểu dữ liệu) nói về hai:
<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>.
Theo hiểu biết của tôi, không có sự khác biệt giữa các loại dữ liệu NUMERIC và DECIMAL. Chúng đồng nghĩa với nhau và một trong hai có thể được sử dụng. Các kiểu dữ liệu DECIMAL và NUMERIC là các kiểu dữ liệu số với độ chính xác và tỷ lệ cố định.
Biên tập:
Nói chuyện với một vài trường đại học có lẽ nó có liên quan gì đó với DECIMAL là tiêu chuẩn ANSI SQL và NUMERIC là một Mircosoft thích vì nó thường được tìm thấy trong các ngôn ngữ lập trình. ...Có lẽ ;)
Chúng là các từ đồng nghĩa, không có sự khác biệt nào cả. Các loại dữ liệu Số và Số là các loại dữ liệu số với độ chính xác và tỷ lệ cố định.
-- 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
Câu trả lời của Joakim Backman là cụ thể, nhưng điều này có thể mang lại sự rõ ràng hơn cho nó.
Có một sự khác biệt nhỏ. Theo SQL cho người giả, phiên bản thứ 8 (2013):
Kiểu dữ liệu DECIMAL tương tự như NUMERIC. ... Sự khác biệt là việc triển khai của bạn có thể chỉ định độ chính xác lớn hơn mức bạn chỉ định - nếu vậy, việc triển khai sử dụng độ chính xác cao hơn. Nếu bạn không chỉ định độ chính xác hoặc tỷ lệ, việc triển khai sẽ sử dụng các giá trị mặc định, giống như với kiểu SỐ.
Có vẻ như sự khác biệt về một số triển khai của SQL nằm ở tính toàn vẹn dữ liệu. DECIMAL cho phép tràn từ những gì được xác định dựa trên một số giá trị mặc định của hệ thống, trong đó như NUMERIC thì không.