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列。
2,147,483,647是sql int列的最大值。因此你用2,999,999,999溢出了它。如果您需要插入高于2,147,483,647的值,则需要将该列设置为bigint。 –
Hi @JacobH!感谢你的回答。所以,我应该改变列类型还是我从txt截断记录?问题是,这是一个映射表,我需要所有结果... – Oihc
是的,只要将您的列类型更改为bigint即可,如果您需要一个大小的整数。 –