nvarchar值的转换溢出了一个int列,用于从文件插入

时间:2017-06-27 19:37:41

标签: sql sql-server insert

我正在尝试将数据从txt文件插入到特定的表中,并为其提供BPC xml架构。 txt文件包含很多行,出于某种原因,当达到值'2999999999'时,它会给我一个错误。我尝试使用Cast作为Int,但仍然没有。

这是SQL查询:

INSERT INTO regioneanhotelidmapping(RegionID, EANHotelID)
    SELECT cast(RegionID as int), cast(EANHotelID as int)

     FROM OPENROWSET(BULK 'D:\EAN\RegionEANHotelIDMapping\RegionEANHotelIDMapping.txt',
                             FORMATFILE='D:\EAN\eanRefresh\bcpxml\RegionEANHotelIDMapping.xml', FIRSTROW = 2) as BCP

这就是XML:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="01" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="2000" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="02" xsi:type="CharTerm" TERMINATOR="\n" MAX_LENGTH="2000" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>

 </RECORD>
 <ROW>
  <COLUMN SOURCE="01" NAME="RegionID"       xsi:type="SQLNVARCHAR" NULLABLE="YES"/>
  <COLUMN SOURCE="02" NAME="EANHotelID"     xsi:type="SQLNVARCHAR" NULLABLE="YES"/>


  </ROW>
</BCPFORMAT>

错误是:Msg 248,Level 16,State 1,Line 1 nvarchar值'2999999999'的转换溢出了一个int列。

1 个答案:

答案 0 :(得分:1)

对于INT,该数字太大,您需要将数据类型修改为该值的BIGINT。限制是2.3B并且改变,你在2.9B并且改变。 请参阅以下页面以供参考。

https://docs.microsoft.com/en-us/sql/t-sql/data-types/int-bigint-smallint-and-tinyint-transact-sql