Увеличить числовой диапазон столбца таблицы в SQL Server без использования ALTER TABLE

#sql-server

#sql-server

Вопрос:

У меня есть таблица с именем Range , которая содержит столбец min_value с типом данных int . Мне нужно сохранить длинное значение для этого столбца. ALTER TABLE выделяет больше места для существующих данных. Это неэффективно. По сути, мне нужно больше места для записей, которые будут добавлены в будущем. Не для существующих.

Комментарии:

1. У вас не может быть одного типа данных для существующих данных и другого, большего размера для будущих данных. Если int он уже недостаточно велик, вам нужно использовать ALTER TABLE для изменения типа данных этого столбца на BIGINT — и это относится ко всем строкам — существующим и будущим. Обойти это невозможно.

Ответ №1:

Вероятно, вам лучше всего просто использовать ALTER TABLE и изменять тип данных столбца на BIGINT .

Если вы беспокоитесь о значениях, занимающих 8 байт, которые могут занимать намного меньше, вы можете включить сжатие строк, если в Enterprise Edition это одна из проблем, которую это решает.

Альтернативой может быть добавление нового столбца BIGINT min_value2 с нулевым значением . У вас может быть ограничение проверки, которое гарантирует, что только один столбец имеет значение и не сохраняется вычисляемый столбец с использованием ISNULL(min_value2,min_value) . Первоначально это было бы довольно дешево, поскольку это только метаданные, но со временем это будет дороже, поскольку новые строки и обновленные строки в конечном итоге займут место для обоих столбцов.

Другой альтернативой было бы создать новую таблицу с помощью BIGINT и просто перейти к использованию ее для строк, которые в ней нуждаются. У вас могло бы сложиться мнение, что объединение объединяет их все вместе. Но это добавило бы сложности и, вероятно, снизило бы эффективность плана выполнения запросов.