У меня есть база данных SQL Server, и я только что понял, что могу изменить тип одного из столбцов с int
на bool
.
Как я могу сделать это без потери данных, которые уже введены в эту таблицу?
У меня есть база данных SQL Server, и я только что понял, что могу изменить тип одного из столбцов с int
на bool
.
Как я могу сделать это без потери данных, которые уже введены в эту таблицу?
Ответы:
Вы можете легко сделать это, используя следующую команду. Любое значение 0 будет превращено в 0 (BIT = false), все остальное будет превращено в 1 (BIT = true).
ALTER TABLE dbo.YourTable
ALTER COLUMN YourColumnName BIT
Другой вариант - создать новый столбец типа BIT
, заполнить его из старого столбца, а после завершения отбросить старый столбец и переименовать новый в старое имя. Таким образом, если во время преобразования что-то пойдет не так, вы всегда можете вернуться назад, так как у вас все еще есть все данные.
NULL
остается NULL
, 0
становится , становятся False
ненулевые значения (1, -1, 1999, -987 ...) True
.
ALTER TABLE tablename
ALTER COLUMN columnname columndatatype(size)
Примечание: если есть размер столбцов, просто напишите размер.
Если это действительное изменение.
Вы можете изменить собственность.
Сервис -> Параметры -> Дизайнеры -> Дизайнеры таблиц и баз данных -> Снять отметку -> Запретить сохранение изменений, которые требовали пересоздания таблицы.
Теперь вы можете легко изменить имя столбца без воссоздания таблицы или потери записей.
Как вы думаете, почему вы потеряете данные? Просто зайдите в Management Studio и измените тип данных. Если существующее значение можно преобразовать в bool (бит), это будет сделано. Другими словами, если «1» соответствует значению true, а «0» соответствует значению false в исходном поле, все будет в порядке.
если вы используете T-SQL (MSSQL); Вы должны попробовать этот скрипт:
ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5)
если вы используете MySQL; Вы должны попробовать этот скрипт:
ALTER TABLE [Employee] MODIFY COLUMN [Salary] NUMERIC(22,5)
если вы используете Oracle; Вы должны попробовать этот скрипт:
ALTER TABLE [Employee] MODIFY [Salary] NUMERIC(22,5)
Перейдите в Tool-Option-designer-Table и Database конструкторы и снимите флажок Предотвратить сохранение
Изменить тип данных столбца с типом проверки столбца:
IF EXISTS(
SELECT 1
FROM sys.columns
WHERE NAME = 'YourColumnName'
AND [object_id] = OBJECT_ID('dbo.YourTable')
AND TYPE_NAME(system_type_id) = 'int'
)
ALTER TABLE dbo.YourTable ALTER COLUMN YourColumnName BIT
для меня в SQL Server 2016, я делаю это так
* Чтобы переименовать столбец Column1 в column2
EXEC sp_rename 'dbo.T_Table1.Column1', 'Column2', 'COLUMN'
* Чтобы изменить тип столбца из строки в int :( Пожалуйста, убедитесь, что данные в правильном формате )
ALTER TABLE dbo.T_Table1 ALTER COLUMN Column2 int;
Замените тип данных без потери данных
alter table tablename modify columnn newdatatype(size);