Insert Select不会将NVARCHAR转换或转换为Float

时间:2014-09-09 22:04:16

标签: select insert sql-server-2012 type-conversion

我正在尝试执行insert select语句将所有数据从一个表移动到另一个表。源表中的两个列的数据类型为NVARCHAR,目标表的数据类型为Float

我试图使用castconvert,但我不断收到以下消息:

  

将数据类型nvarchar转换为float时出错。

代码:

INSERT INTO Destination_Table
      ([SCAC]
      ,[Date]
      ,[Orgin]
      ,[Destination Low Zip]
      ,[Destination High Zip]
      ,[Class]
      ,[Minimum Charge]
      )

SELECT [SCAC]
      ,[Date]
      ,[Origin]
      ,cast([Destination Low Zip]   as float)
      ,cast([Destination High Zip]  as float)
      ,[Class]
      ,[Minimum Charge]

  FROM source_table

1 个答案:

答案 0 :(得分:0)

在没有看到数据的情况下,我猜测列可能有一些NULL数据,这会抛出此错误,因此代码应为

INSERT INTO Destination_Table
  ([SCAC]
  ,[Date]
  ,[Orgin]
  ,[Destination Low Zip]
  ,[Destination High Zip]
  ,[Class]
  ,[Minimum Charge]
  )
SELECT [SCAC]
  ,[Date]
  ,[Origin]
  ,cast(ISNULL([Destination Low Zip],0)   as float)
  ,cast(ISNULL([Destination High Zip],0)  as float)
  ,[Class]
  ,[Minimum Charge]
FROM source_table

如果你想要NULL,那么

INSERT INTO Destination_Table
  ([SCAC]
  ,[Date]
  ,[Orgin]
  ,[Destination Low Zip]
  ,[Destination High Zip]
  ,[Class]
  ,[Minimum Charge]
  )
SELECT [SCAC]
  ,[Date]
  ,[Origin]
  ,NULLIF(CAST(ISNULL([Destination Low Zip],0)   as float), 0)
  ,NULLIF(CAST(ISNULL([Destination High Zip],0)  as float),0)
  ,[Class]
  ,[Minimum Charge]
 FROM source_table