【发布时间】:2017-06-28 04:33:54
【问题描述】:
我正在尝试将数据从 txt 文件插入到特定表中,并为其提供 BPC xml 架构。 txt 文件包含很多行,由于某种原因,当一个字段的值达到“2999999999”时,它给了我一个错误。我已经尝试过 Cast as 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 列。
【问题讨论】:
-
2,147,483,647 是 sql int 列的最大值。因此,您已经用 2,999,999,999 溢出了它。如果您需要插入大于 2,147,483,647 的值,则需要将该列设为 bigint。
-
嗨@JacobH!感谢你的回答。那么,我应该为此更改列类型还是只截断 txt 中的记录?问题是,这是一个映射表,我需要所有结果...
-
是的,如果您需要这样大小的整数,只需将列类型更改为 bigint。
-
谢谢!工作:)
标签: sql sql-server insert