nvarchar 值“3001822585"的转换溢出了 int 列 [英] Conversion of the nvarchar value '3001822585' overflowed an int column

查看:18
本文介绍了nvarchar 值“3001822585"的转换溢出了 int 列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用以下将 Excel 文件导入 SQL Server.

I use following to import Excel file to SQL Server.

Excel 文件的所有值都是字符串.我可以导入除 BarcodeSalePricePrice2 之外的文件.我收到错误

The Excel file has all the values as string. I am able to import the file except Barcode, SalePrice and Price2. I get error

转换 nvarchar 值 '3001822585'(barcode) 溢出了 int 列

Conversion of the nvarchar value '3001822585'(barcode) overflowed an int column

代码:

         SqlCommand sqlcmd = new SqlCommand
         (@"MERGE Inventory AS target
         USING (SELECT
            LocalSKU, ItemName, QOH, Price, Discontinued,Barcode, Integer2
            ,Integer3, SalePrice, SaleOn, Price2 FROM @source)
            AS Source ON (Source.LocalSKU = target.LocalSKU)
           WHEN MATCHED THEN
           UPDATE 
           SET ItemName = source.ItemName,
           Price = source.Price,
           Discontinued = source.Discontinued,
           Barcode = source.Barcode,
           Integer2 = source.Integer2,
           Integer3 = source.QOH,
           SalePrice = source.SalePrice,
           SaleOn = source.SaleOn,
           Price2 = source.Price2;", sqlconn);

           SqlParameter param;
           param = sqlcmd.Parameters.AddWithValue("@source", dr);
           param.SqlDbType = SqlDbType.Structured;
           param.TypeName = "dbo.InventoryType";

           sqlconn.Open();
           sqlcmd.ExecuteNonQuery();
           sqlconn.Close();

数据库::

 LocalSKU varchar(200),
 ItemName varchar(200),
 QOH int,
 Price decimal(19,4),
 Discontinued bit,
 Barcode int,
 Integer2 int,
 Integer3 int,
 SalePrice decimal(19,4),
 SaleOn bit,
 Price2 decimal(19,4)

dbo.InventoryType 是:

   CREATE TYPE [dbo].[InventoryType] AS TABLE
   (
      [LocalSKU] [varchar](200) NOT NULL,
      [ItemName] [varchar](200) NULL,
      [QOH] [int] NULL,
      [Price] [decimal](19, 4) NULL,
      [Discontinued] [bit] NULL,
      [Barcode] [varchar](25) NULL,
      [Integer2] [int] NULL,
      [Integer3] [int] NULL,
      [SalePrice] [decimal](19, 4) NULL,
      [SaleOn] [bit] NULL,
      [Price2] [decimal](19, 4) NULL
   )
   GO

如何转换表值参数中的数据类型?示例将不胜感激.

How to cast the datatype in table valued parameter? Example will be appreciated.

推荐答案

使用 unsignedInt 数据类型.

Use unsignedInt datatype.

int range - 4 bytes, -2,147,483,648 to +2,147,483,647 
unsignedInt range - 0 to 4,294,967,295 

您的条码值 3001822585 超过最大整数值 2,147,483,647,因此引发错误

Your barcode value 3001822585 is exceeding max int value 2,147,483,647 and so throws error

编辑

unigned int 在 SQL Server 中找不到,但 MySQL 支持它.对于 SQL Server,您必须使用 bigINT

unigned int are not found in SQL Server , however MySQL supports it. For SQL Server you will have to use bigINT

bigInt range - 8 bytes -2^63 to 2^63-1 

因此将 Barcode 列的数据类型更改为 bigInt .如果您认为其他列值可以超过 int range ,那么也更改它们的数据类型.

So change data type of Barcode column to bigInt . If you think other column values can exceed int range , then change their datatype also.

这篇关于nvarchar 值“3001822585"的转换溢出了 int 列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆