Можно ли изменить тип данных поля на nvarchar на int?
alter table employee alter column designation int
это действительно?? Если нет, то можно ли это сделать каким-то другим способом?
П.С.: Я использую MS SQL Server
Можно ли изменить тип данных поля на nvarchar на int?
alter table employee alter column designation int
это действительно?? Если нет, то можно ли это сделать каким-то другим способом?
П.С.: Я использую MS SQL Server
Вы можете попробовать сделать таблицу изменений. Если это не удается, сделайте это:
ALTER TABLE tableName ADD newCol int;
UPDATE tableName SET newCol = CAST(oldCol AS int)
;
Это возможно, только если столбец не имеет значения или пусто. Если ваша колонка имеет некоторое значение, которое имеет значение nvarchar, и вы должны попытаться преобразовать его в int, это даст ошибку.
ALTER TABLE [table_name] ALTER COLUMN [column_name] [data_type]
Это сработало для меня (с десятичными знаками, но я полагаю, что он будет работать с 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
Можно сделать еще проще всего за 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
Создайте временный столбец
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;
Вы можете попробовать это?
alter table MyTable add MyColNum Varchar(500) null;
alter table MyTable add MyColNum int null;