2016-10-16 2 views
0

Привет я хочу, чтобы изменить свою таблицу из NVARCHAR плавать, когда моя таблица содержит значенияAlter Table от NVARCHAR плавать с содержащими значений

я пытаюсь этот код:

alter table MY_TABLE alter column PRICE float 

Но я получить ошибку Msg 8114, уровень 16, состояние 5, строка 1 Ошибка преобразования тип данных nvarchar для плавания.

+0

Разве это не очевидно. –

+0

Сообщение об ошибке довольно ясно – Paparazzi

+0

Удалите все данные 'varchar', затем запустите' ALTER' statement –

ответ

1

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

Итак, чтобы избавиться от этого значения первого:

update my_table 
    set price = try_convert(float, price); 

Тогда преобразование будет работать:

alter table MY_TABLE alter column PRICE float; 

Я хотел бы отметить: float плохой тип данных для столбца «цена». Это действительно должно быть числовое или денежное.

В SQL Server 2008, используйте isnumeric() вместо:

update my_table 
    set price = NULL 
    where isnumeric(price) = 0 
0

Данные обзора, которые не могут быть преобразованы

Select * from MY_TABLE where IsNumeric(PRICE)=0 

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

Update MY_TABLE Set PRICE = null where IsNumeric(PRICE)=0 
Alter table MY_TABLE alter column PRICE float 
1

Первый Update плохие записи

Update MY_TABLE set PRICE = Replace(Replace(Price,',','.'),' ','') 

Затем запустите alter

alter table MY_TABLE alter column PRICE float; 

К Insert в новую таблицу

Insert into table_name (Price,col1,..) 
Select Replace(Replace(Price,',','.'),' ',''),col1,col2,.. 
From MY_TABLE 

FLOAT является приближенным тип данных не будет хранить точное значение

+0

Могу ли я избежать обновления, а затем изменить таблицу? когда я использую insert to in select * from .., чтобы заменить запятую на точку. – user6927546

+0

@ user6927546 - Да, вы можете обновить мой ответ –