Zmienna dziesiętna (10,9) nie może pomieścić liczby 50 (SQL Server 2008)

Ten jest całkiem prosty. Dlaczego poniższy kod powoduje błąd poniżej?

declare @dTest decimal(10, 9)
set @dTest = 50

Błąd:

Msg 8115, Level 16, State 8, Line 3
Arithmetic overflow error converting int to data type numeric.

WedługDokumentacja MSDN nadecimal(p, s), p (lub 10 w moim przypadku) to „maksymalna całkowita liczba cyfr dziesiętnych, które można zapisać,zarówno po lewej, jak i po prawej stronie separatora dziesiętnego" natomiasts (lub 9 w moim przypadku) to „maksymalny liczba cyfr dziesiętnych, które można zapisaćw prawo miejsca dziesiętnego. ”

Mój numer, 50, ma tylko 2 cyfry ogółem (mniej niżmaksymalny 10) i 0 cyfr po prawej stronie dziesiętnej (która jest mniejsza niżmaksymalny 9), dlatego powinien działać.

znalazłemto pytanie o zasadniczo tym samym problemie, ale nikt nie wyjaśnił, dlaczego dokumentacja wydaje się kolidować z zachowaniem. Wygląda na tos wymiar jest faktycznie interpretowany jakonaprawiony liczba cyfr po prawej stronie dziesiętnej i bycieodjęte zp numer, który w moim przypadku wynosi 10 - 9 = pozostała tylko 1 cyfra do obsługi lewej strony.

Czy każdy może zapewnić rozsądny sposób interpretowania dokumentacji w formie zgodnej z zachowaniem?

EDYTOWAĆ:

Widzę kilka wyjaśnień poniżej, ale nie rozwiązują one podstawowego problemu z brzmieniem dokumentów. Proponuję tę zmianę brzmienia:

Dla „p (precyzja)” zmień „Maksymalna całkowita liczba cyfr dziesiętnych, które można zapisać”, aby odczytać „Maksymalna całkowita liczba cyfr dziesiętnych, którebędzie być przechowywane ”.

I dla „s (skala)” zmień „Maksymalna liczba cyfr dziesiętnych, które można zapisać po prawej stronie przecinka dziesiętnego”. do "Liczba cyfr dziesiętnych, którebędzie być przechowywane po prawej stronie kropki dziesiętnej. Ta liczba jest odejmowana od p, aby określić maksymalną liczbę cyfr po lewej stronie kropki dziesiętnej. "

Zamierzam przesłać raport o błędzie do Connect, chyba że ktoś ma lepsze wyjaśnienie.

questionAnswers(5)

yourAnswerToTheQuestion