2017-06-27 36 views
1

我想从一个txt文件插入数据到一个特定的表,它有一个BPC xml模式。 txt文件包含很多行,并且由于某种原因,如果达到值“2999999999”,那么它就会给我一个错误。我已经尝试使用Cast作为Int,但仍然没有任何结果。nvarchar值的转换溢出一个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> 

和错误是:消息248,级别16,状态1,行 的转换nvarchar值'2999999999'溢出了一个int列。

+3

2,147,483,647是sql int列的最大值。因此你用2,999,999,999溢出了它。如果您需要插入高于2,147,483,647的值,则需要将该列设置为bigint。 –

+0

Hi @JacobH!感谢你的回答。所以,我应该改变列类型还是我从txt截断记录?问题是,这是一个映射表,我需要所有结果... – Oihc

+0

是的,只要将您的列类型更改为bigint即可,如果您需要一个大小的整数。 –

回答

相关问题