Есть ли способ изменить точность существующего десятичного столбца в Sql Server?





Зайдите в менеджер предприятия, составьте таблицу, щелкните свое поле.
Сделайте десятичный столбец
В свойствах внизу есть свойство точности
В таком случае не делайте этого: p
Я никогда не понимал эту страницу с таблицей дизайна. Вы не можете вносить какие-либо изменения в тип данных, даже если это не проблема сделать это в запросе. Предположительно страница дизайна использует запросы в фоновом режиме, я не понимаю, почему было реализовано это ограничение.
Вы можете отключить это через: Инструменты> Параметры> Дизайнеры - «Предотвратить сохранение изменений, требующих повторного создания таблицы».
ALTER TABLE Testing ALTER COLUMN TestDec decimal(16,1)
Просто поставьте decimal(precision, scale), заменив точность и масштаб желаемыми значениями.
Я не тестировал это с данными в таблице, но если вы измените точность, вы потеряете данные, если новая точность будет ниже.
Это сработало для меня при увеличении точности десятичного (18,2) до десятичного (18,3).
Спасибо, так просто, все еще трудно найти.
Если у вас есть 16-значное (общее) число и вы увеличиваете масштаб, будет ли оно вытеснено цифрами более высокого порядка, чтобы освободить место для двух новых десятичных знаков? К сожалению, сейчас я не могу это проверить.
Чтобы ответить на свой вопрос, я создал sqlfiddle: sqlfiddle.com/#!3/4b8cb/1/0. Ответ заключается в том, что изменение десятичного числа (18,2) на десятичное (18,3) приведет к ошибке при изменении таблицы. десятичное (18,2) в десятичное (19,3), хотя должно работать.
Может быть лучший способ, но вы всегда можете скопировать столбец в новый столбец, отбросить его и переименовать новый столбец обратно в имя первого столбца.
а именно:
ALTER TABLE MyTable ADD NewColumnName DECIMAL(16, 2);
GO
UPDATE MyTable
SET NewColumnName = OldColumnName;
GO
ALTER TABLE CONTRACTS DROP COLUMN OldColumnName;
GO
EXEC sp_rename
@objname = 'MyTable.NewColumnName',
@newname = 'OldColumnName',
@objtype = 'COLUMN'
GO
Это было протестировано на SQL Server 2008 R2, но должно работать на SQL Server 2000+.
ALTER TABLE `tableName` CHANGE `columnName` DECIMAL(16,1) NOT NULL;
Я использую это для переделки
ALTER TABLE (Your_Table_Name) MODIFY (Your_Column_Name) DATA_TYPE();
Для вас проблема:
ALTER TABLE (Your_Table_Name) MODIFY (Your_Column_Name) DECIMAL(Precision, Scale);
Это воссоздает таблицу.