2015-11-03 4 views
1

Я переношу данные из старой базы данных в новую базу данных. Несколько столбцов имеют разные типы данных. вместо float, десятичное число есть в новом db. мой запрос ниже, но его дает ошибку:Как вставить другой тип данных в другую таблицу

Arithmetic overflow error converting float to data type numeric. 

есть ли способ, чтобы вставить все данные без каких-либо проблем

Запрос:

insert into [newdb].[dbo].[newtab](State,StationID,AlertLevel,WarningLevel,DangerLevel,NormalLevel,UpperWaterLevel,LowerWaterLevel,WaterLevel_StationCode,RainFall_StationCode,OneHourRainfall,TwoHourRainFall,FourHourRainfall,TwantyFourHourRain,Lattitude,Longitude,District,RiverBasin,StationType) 
Select State,Station_Name,ALERT,WARNING,DANGER,NORMAL,UPPER_WL,LOWER_WL,STID_WL,STID_RF,RF1HR,RF2HR,RF4HR,RF24HR,LATITUDE,LONGITUDE,DISTRICT,RIVER_BASSIN,StType from [olddb].[dbo].oldtab; 

Типы данных:

Olddb

STATE varchar(50) 
STATION_NAME varchar(50) 
MMIID int 
STATION_ID int 
ALERT float 
WARNING float 
DANGER float 
NORMAL float 
MAX_WL float 
MAIN_ID int 
UPPER_WL float 
LOWER_WL float 
STID_WL int 
STID_RF int 
RF1HR float 
RF2HR float 
RF4HR float 
RF24HR float 
LATITUDE decimal(7, 6) 
LONGITUDE decimal(9, 6) 
REAL_NAME varchar(50) 
DISTRICT varchar(50) 
RIVER_BASSIN varchar(50) 
position_wl int 
station_status int 
position_rf int 
FULLNAME varchar(70) 
station_update int 
rainfall_name varchar(70) 
TIMESTAMPS smalldatetime 
Lembangan int 
StType varchar(50) 

NEWDB

ID int 
StationID varchar(50) 
StationName varchar(100) 
District varchar(50) 
RiverBasin varchar(50) 
CrossSectionID varchar(50) 
LastUpdate datetime 
State varchar(50) 
CreatedBy varchar(50) 
CreationDate datetime 
Deletedby varchar(50) 
DeletionDate datetime 
Lattitude decimal(9, 6) 
Longitude decimal(9, 6) 
Status bit 
OneHourRainfall int 
TwoHourRainFall int 
FourHourRainfall int 
TwantyFourHourRain int 
NormalLevel decimal(7, 2) 
AlertLevel decimal(7, 2) 
WarningLevel decimal(7, 2) 
DangerLevel decimal(7, 2) 
StationType varchar(50) 
WaterLevelParameter varchar(1) 
NormalMin decimal(7, 2) 
NormalMax decimal(7, 2) 
ModerateMin decimal(7, 2) 
ModerateMax decimal(7, 2) 
HeavyMin decimal(7, 2) 
HeavyMax decimal(7, 2) 
RainfallParameter varchar(1) 
UpperWaterLevel decimal(7, 2) 
LowerWaterLevel decimal(7, 2) 
PostWL decimal(7, 2) 
PostRF decimal(7, 2) 
FlowParameter varchar(1) 
RainFall_StationCode varchar(50) 
WaterLevel_StationCode varchar(50) 
Flow_StationCode varchar(50) 
StationStatus varchar(10) 
WaterLevelStation varchar(10) 
ImageName varchar(50) 
ModifyBy varchar(50) 
ModifyDate datetime 
Spike15MinWL decimal(7, 2) 
Spike1HrWL decimal(7, 2) 
RainfallHigh decimal(7, 2) 
+0

Возможно, вам стоит прочитать этот https://msdn.microsoft.com/en-us/library/ms187746.aspx –

+0

@lc. ни один столбец не равен в select и insert statement – vim

ответ

2

Проблема, возникающая из-типа данных в новой БД не большой enough.There 2 способа сделать это:

  1. Найдите максимальное значение полей float/decimal/int в старой базе данных и убедитесь, что типов данных в новой базе данных достаточно.
  2. Увеличьте свои десятичные столбцы в своем новом db до более высокого типа, скажем, до десятичного числа 18,4, если они теперь 6,2 или 9,2. После того, как вы закончите с миграцией, вы можете масштабироваться.