Как изменить тип данных столбца в базе данных SQL без потери данных - PullRequest
178 голосов
/ 28 февраля 2011

У меня есть база данных SQL Server, и я только что понял, что могу изменить тип одного из столбцов с int на bool.

Как я могу сделать это без потери данных, которые уже введены в эту таблицу?

Ответы [ 11 ]

306 голосов
/ 28 февраля 2011

Вы можете легко сделать это, используя следующую команду. Любое значение 0 будет превращено в 0 (BIT = false), все остальное будет превращено в 1 (BIT = true).

ALTER TABLE dbo.YourTable
   ALTER COLUMN YourColumnName BIT

Другой вариант - создать новый столбец типа BIT, заполнить его из старого столбца, а после завершения отбросить старый столбец и переименовать новый в старое имя. Таким образом, если во время преобразования что-то пойдет не так, вы всегда можете вернуться назад, так как у вас все еще есть все данные.

18 голосов
/ 25 июля 2016

Если это допустимое изменение.

вы можете изменить свойство.

Инструменты -> Параметры -> Дизайнеры -> Дизайнеры таблиц и баз данных ->Снимите флажок -> Запретить сохранение изменений, которые требовали пересоздания таблицы.

Теперь вы можете легко изменить имя столбца, не создавая заново таблицу или не теряя записи ur.

16 голосов
/ 08 июля 2015
ALTER TABLE tablename
ALTER COLUMN columnname columndatatype(size)

Примечание: если есть размер столбцов, просто напишите размер.

8 голосов
/ 28 февраля 2011

Почему вы думаете, что вы потеряете данные?Просто зайдите в Management Studio и измените тип данных.Если существующее значение можно преобразовать в bool (бит), это будет сделано.Другими словами, если «1» соответствует значению true, а «0» соответствует значению false в исходном поле, все будет в порядке.

4 голосов
/ 21 сентября 2017

, если вы используете 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)
3 голосов
/ 31 мая 2017

Перейдите в Инструмент-Опции-конструкторы-Дизайнеры таблиц и баз данных и снимите флажок Запретить сохранение enter image description here

2 голосов
/ 26 февраля 2019

Изменить тип данных столбца с типом проверки столбца:

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
1 голос
/ 10 января 2019

для меня, в SQL Server 2016, я делаю это так

* Чтобы переименовать столбец Column1 в column2

EXEC sp_rename 'dbo.T_Table1.Column1', 'Column2', 'COLUMN'

* Чтобы изменить тип столбца с строка на int :( Убедитесь, что данные имеют правильный формат )

ALTER TABLE dbo.T_Table1 ALTER COLUMN Column2  int; 
0 голосов
/ 20 июня 2017

Я могу изменить тип данных поля таблицы с помощью следующего запроса: а также в БД Oracle,

ALTER TABLE table_name
MODIFY column_name datatype;
0 голосов
/ 21 марта 2017

Заменить тип данных без потери данных

alter table tablename modify columnn  newdatatype(size);
...