Что польза отображает десятичного числа.NET на десятичное число SQL Server?

Я должен соединить интерфейсом с некоторым кодом C# с SQL Server, и я хочу иметь точно столько же точности при хранении значения в базе данных, сколько я делаю со своим кодом C#. Я использую одну из.NET decimal введите для значения. Какой тип данных/точность я использовал бы для этого значения в SQL Server?

Я знаю что SQL Server decimal тип является типом что наиболее вероятные соответствия мои потребности в этом. Мой вопрос, хотя то, что масштаб и точность, я использую так, чтобы это соответствовало.NET decimal ввести?

36
задан Earlz 30 June 2010 в 19:18
поделиться

3 ответа

Вы можете использовать тип SQL Server decimal (документация здесь). Это позволит вам указать точность и масштаб для чисел в базе данных, которые вы можете установить такими же, как в вашем коде C#.

Однако ваш вопрос, похоже, касается сопоставления десятичного типа .NET с десятичным типом SQL Server. И, к сожалению, это не так просто. Десятичная дробь SQL Server при максимальной точности охватывает диапазон от -1038+1 до 1038-1. В .NET, однако, она может охватывать диапазон от ±10-28 до ±7,9×1028, в зависимости от числа.

Причина в том, что внутри .NET десятичные числа обрабатываются очень похоже на плавающие - они хранятся как пара чисел, мантисса и экспонента. Если у вас особенно большая мантисса, вы потеряете часть точности. По сути, .NET позволяет вам смешивать числа, имеющие как высокий, так и низкий масштаб; SQL Server требует, чтобы вы заранее выбрали его для данного столбца.

Короче говоря, вам нужно решить, каков допустимый диапазон десятичных значений для ваших целей, и убедиться, что и ваша программа, и база данных могут его обрабатывать. Вам нужно сделать это в любом случае для вашей программы (если вы смешиваете значения типа 10-28 с 7.9×1028, вы не можете полагаться на десятичный тип в любом случае).

13
ответ дан 27 November 2019 в 06:11
поделиться

Эта диаграмма может помочь вам.

Максимальная точность для числовых и десятичных значений в SQL Server равна 38 (см. здесь).

4
ответ дан 27 November 2019 в 06:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: