powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как поменять тип колонки с данными с float на numeric
14 сообщений из 14, страница 1 из 1
Как поменять тип колонки с данными с float на numeric
    #40101951
lsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lsk
Гость
Доброй ночи,

есть в таблице колонка с типом
Код: sql
1.
float(53)

, ее необходимо сконверитить в
Код: sql
1.
numeric(28,10)

, но у меня проблема в том, что в таблице есть очень много записей и я не могу их удалить.

подскажите, пожалуйста, можно одноврененно и апдейт типа сделать и конверт значений?

Заранее спасибо.
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40101970
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
alter table Таблица alter column Колонка numeric(28,10);
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40101989
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lsk,

Можете добавить в таблицу новую колонку numeric(28,10), в неё перенести данные из колонки float(53), после переноса удалить колонку float(53) и присвоить её колонке numeric(28,10).
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40102033
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
teCa, интересно, а зачем? alter column проделает то же самое!
Так имеет смысл поступать, только в случае если типы или некоторые значения - не приводятся автоматически.
Тогда да.
Удалить индексы, в которых участвует обновляемая колонка, добавить колонку, проапдейтить с явным преобразованием, удалить колонку, переименовать новую в старую, сделать alter table rebuild, построить ранее удаленные индексы.
... как то так.
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40102036
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё надо пройти по процедурам и заменить типы переменных, если такие были. Изменение типов параметров надо применять осторожно, может потребоваться доработка клиентского приложения.
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40102037
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
teCa, интересно, а зачем? alter column проделает то же самое!
Так имеет смысл поступать, только в случае если типы или некоторые значения - не приводятся автоматически.

Например, для порционного переноса
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40102049
lsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lsk
Гость
aleks222
Код: sql
1.
alter table Таблица alter column Колонка numeric(28,10);



а так ерроров не будет, оно просто автоматом конвертнет и максимум, что может быть - это потеряться точность?
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40102075
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lsk
aleks222
Код: sql
1.
alter table Таблица alter column Колонка numeric(28,10);



а так ерроров не будет, оно просто автоматом конвертнет и максимум, что может быть - это потеряться точность?


Операция либо будет закончена целиком, либо все останется как есть (если возникнет ошибка).
Так работают реляционные базы данных.

Если вам "попробовать"

Код: sql
1.
2.
3.
4.
5.
6.
begin transaction;
alter table Таблица alter column Колонка numeric(28,10);
-- здесь можно проверок понаписать...
-- только на реальных рабочих серверах так делать не надо
-- все будут курить.
rollback transaction;
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40102093
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
uaggster
teCa, интересно, а зачем? alter column проделает то же самое!
Так имеет смысл поступать, только в случае если типы или некоторые значения - не приводятся автоматически.

Например, для порционного переноса


Именно.
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40102116
lsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lsk
Гость
всем спасибо большое за разъяснения.
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40102135
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
teCa
msLex
пропущено...

Например, для порционного переноса


Именно.

Флейма для:
Не понимаю, зачем может понадобиться порционный перенос.
В случае, если у вас миллиард записей в таблице? И вам не хочется блокировать таблицу надолго?

Ну, предположим, вы добавили поле (что, кстати, будет затратной и блокирующей операцией, если поле фиксированной длины)
Чего вы хотите добиться перенося данные порциями? Чтобы у вас блокировка не эскалировалась до уровня таблицы (и параллельные запросы не отправились курить?). Ну сделайте ALTER TABLE ... SET ( LOCK_ESCALATION = DISABLE) и запустите апдейт WITH (ROWLOCK), нет?
А потом всё равно убивать индексы с данным полем, и строить их заново, что тоже затратная и блокирующая операция, если у вас не энтерпрайз, конечно. Хотя да, миллиард строк, у вас энтерпрайз... ну, или очень. Очень. Очень прямые руки. Ну и alter table rebuild тоже не мешало бы сделать после удаления поле. Миллиард же...
Хотя вот ни разу не помню, бывает ли он online.
В общем, не понимаю, зачем порционно то в данном сценарии.
Просветите!
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40102148
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Флейма для:
Не понимаю, зачем может понадобиться порционный перенос.


Alter выполняющаяся в единой транзакции, а значит пока она выполняется лог не сможет усекаться. При достаточно интенсивном изменение данных (не в этой таблице, а вообще во всей БД) и длительной операции alter, может потребоваться очень много места в логе
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40102149
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

блокировка изменения схемы несовместима с другими типами блокировки. Если alter зависнет надолго, то это может повлиять на работу пользователей.
...
Рейтинг: 0 / 0
Как поменять тип колонки с данными с float на numeric
    #40102152
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
uaggster,

блокировка изменения схемы несовместима с другими типами блокировки. Если alter зависнет надолго, то это может повлиять на работу пользователей.

Начиная с SQL Server 2016 alter column можно делать с опцией ONLINE=ON
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как поменять тип колонки с данными с float на numeric
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]