В SQL Server 2005 мы определили некоторые UDT (User Defined Datatypes), в частности, это SK (для ключа Surrogate). Они были определены как 32 бит 'int'. И, следовательно, размер был 4 байта.SQL Server UDT с 2005 по 2008 год
В SQL Server 2008, то UDT для целочисленных типов данных использует другой механизм хранения, в зависимости от точности:
хранения Отображает максимальный размер хранилища для UDT. Максимальные размеры хранилища варьируются в зависимости от точности.
Precision (цифры) ..... хранения (байт)
1 - 9 ........................ 5
10 - 19 .................... 9
20 - 28 ................ ... 13
29 - 38 ................... 17
Одним из следствий этого является то, что на основе Пользовательские типы ОБА INT и BIGINT будет занимать 9 байт! ПРИМЕЧАНИЕ: собственные типы int и bigint по-прежнему занимают соответственно 4 и 8 байтов!
9 байтов кажется довольно тяжелым для суррогатного ключа UDT!
Может ли кто-нибудь объяснить, почему это так (в частности, что такое обоснование дизайна для этого было)? Как получилось это несоответствие между UDT и родными типами данных?
Существуют ли какие-либо альтернативные подходы, кроме НЕ использующих UDT?
Привет Johan, спасибо за это. Я понимаю, что вы сделали. НО проблема в том, что когда я перехожу в «Новый пользовательский тип данных» и создаю UDT на основе int, точность отображается как 10, а хранилище отображается как 9 байтов - не 4, как предполагали sys.types. Любые комментарии по этому поводу? – PaoloFCantoni
Привет, Йохан, дальнейшие исследования показывают, что это ошибка UI. Фактический объем хранилища, выделенный в sys.types, составляет 4 байта для int. Спасибо за помощь. – PaoloFCantoni
Спасибо. (repwhoring part) Если мой ответ действительно помог, пожалуйста, подтвердите и отметьте его как принятый. –