【问题标题】:conversion of the nvarchar value overflowed an int column for inserting from filenvarchar 值的转换溢出了用于从文件插入的 int 列
【发布时间】: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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多