SQL-тип столбца с переменным столбцом от nvarchar до int

Можно ли изменить тип данных поля на nvarchar на int?

alter table employee alter column designation int

это действительно?? Если нет, то можно ли это сделать каким-то другим способом?

П.С.: Я использую MS SQL Server

Ответ 1

Вы можете попробовать сделать таблицу изменений. Если это не удается, сделайте это:

  1. Создайте новый столбец с целым числом:

ALTER TABLE tableName ADD newCol int;

  1. Выберите данные из старого столбца в новый:

UPDATE tableName SET newCol = CAST(oldCol AS int);

  1. Оставьте старую колонку

Ответ 2

Это возможно, только если столбец не имеет значения или пусто. Если ваша колонка имеет некоторое значение, которое имеет значение nvarchar, и вы должны попытаться преобразовать его в int, это даст ошибку.

ALTER TABLE [table_name] ALTER COLUMN [column_name] [data_type]

Ответ 3

  • Добавить новый числовой столбец.
  • Копировать из старого столбца char в новый столбец с отделкой и преобразованием.
  • Удалить старый столбец char.
  • Переименуйте числовой столбец в имя старого столбца.

Это сработало для меня (с десятичными знаками, но я полагаю, что он будет работать с ints):

alter table MyTable add MyColNum decimal(15,2) null
go
update MyTable set MyColNum=CONVERT(decimal(15,2), REPLACE(LTRIM(RTRIM(MyOldCol)), ',', '.')) where ISNUMERIC(MyOldCol)=1
go
alter table MyTable drop column MyOldCol
go
EXEC sp_rename 'MyTable.MyColNum', 'MyOldCol', 'COLUMN'
go

Ответ 4

Можно сделать еще проще всего за 2 шага

  • Обновите столбец и установите для всех не числовых значений значение null, поэтому alter не будет работать.

  • Измените таблицу и задайте тип int.

UPDATE employee
SET designation = (CASE WHEN ISNUMERIC(designation)=1 THEN CAST(CAST(designation AS FLOAT) AS INT)END )

ALTER TABLE employee
ALTER COLUMN designation INT

Это предполагает, что столбцы допускают null. Если нет, то это нужно также обработать. Например: изменив столбец, чтобы разрешить null, после того, как он был преобразован в int, установите все нулевые значения равными 0 и измените таблицу, чтобы не разрешать null

Ответ 5

  • Создайте временный столбец

    ALTER TABLE MYTABLE ADD MYNEWCOLUMN NUMBER(20,0) NULL;

  • Скопировать и передать данные из старого столбца в новый

    UPDATE MYTABLE SET MYNEWCOLUMN=CAST(MYOLDCOLUMN AS NUMBER(20,0));

  • Удалить старый столбец

    ALTER TABLE MYTABLE DROP COLUMN MYOLDCOLUMN;

  • Переименуйте новый, чтобы он совпал с тем же именем, что и старый.

    ALTER TABLE MYTABLE RENAME COLUMN MYNEWCOLUMN TO MYOLDCOLUMN;

Ответ 6

Вы можете попробовать это?

alter table MyTable add MyColNum Varchar(500) null;
alter table MyTable add MyColNum int null;