Устаревшая проблема сценариев автоматического изменения SQL Server 2008

Если вы используете Python 2.7, простое решение состоит в том, чтобы просто округлить ваши float явно до нужной точности.

>>> sys.version
'2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)]'
>>> json.dumps(1.0/3.0)
'0.3333333333333333'
>>> json.dumps(round(1.0/3.0, 2))
'0.33'

Это работает, потому что Python 2.7 сделал float rounding более последовательным . К сожалению, это не работает в Python 2.6:

>>> sys.version
'2.6.6 (r266:84292, Dec 27 2010, 00:02:40) \n[GCC 4.4.5]'
>>> json.dumps(round(1.0/3.0, 2))
'0.33000000000000002'

Решения, упомянутые выше, являются обходными решениями для 2.6, но ни один из них не является полностью адекватным. Исправление Monkey json.encoder.FLOAT_REPR не работает, если ваша среда исполнения Python использует версию C модуля JSON. Класс PrettyFloat в ответе Тома Вуттке работает, но только если кодировка% g работает в глобальном масштабе для вашего приложения. % .15g немного мал, он работает, потому что точность float составляет 17 значащих цифр, а% g не печатает конечные нули.

Я потратил некоторое время, пытаясь сделать PrettyFloat, который позволил настроить точность для каждого номер. То есть, синтаксис, подобный

>>> json.dumps(PrettyFloat(1.0 / 3.0, 4))
'0.3333'

Не так-то просто. Унаследовать от float неловко. Наследование объекта и использование подкласса JSONEncoder с его собственным методом default () должны работать, за исключением того, что модуль json, по-видимому, предполагает, что все пользовательские типы должны быть сериализованы как строки. Т.е.: вы получаете строку Javascript «0.33» на выходе, а не цифру 0.33. Возможно, еще есть способ сделать эту работу, но это сложнее, чем кажется.

11
задан Jason Kealey 9 January 2009 в 17:16
поделиться

3 ответа

В студии управления SQL Server 2 008 goto Инструментов-> Опции-> Обозреватель объектов SQL Server-> Сценарии и Избранный "Сценарий для серверной версии" и изменения это к SQL Server 2005.

13
ответ дан 3 December 2019 в 08:05
поделиться

Рекомендуемое решение для изменения опций, кажется, корректно однако, оно все еще генерирует НАБОР ALTER TABLE (LOCK_ESCALATION = ТАБЛИЦА) на моей базе данных (я даже вставил режим эмуляции 90),

2
ответ дан 3 December 2019 в 08:05
поделиться

Я еще не использовал студию управления 2008 года, но в каждой предыдущей версии Вы смогли установить сценарии на определенную версию SQL Server в опциях где-нибудь.

У меня есть студийный набор управления 2005 года для генерации совместимых сценариев 2000 года по подобным причинам.

0
ответ дан 3 December 2019 в 08:05
поделиться
Другие вопросы по тегам:

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