Conversion of the nvarchar value '3001822585' overflowed an int column

匿名 (未验证) 提交于 2019-12-03 01:22:02

问题:

I use following to import Excel file to SQL Server.

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

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

Code:

         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(); 

Database::

 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 is:

   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.

回答1:

Use unsignedInt datatype.

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

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

Edit

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  

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



回答2:

SQl Statement:

SELECT max( Mother_ID)+1 FROM Mother 

http://i.stack.imgur.com/ACKAW.jpg Msg 248, Level 16, State 1, Line 1 The conversion of the nvarchar value '182512900911500120' overflowed an int column.

The problem is caused due to the number 182512900911500120 exceeds int range. If we convert in to bigint than it works.

i.e.

SELECT max(convert(bigint,Mother_ID))+1 as MID FROM Mother 

http://i.stack.imgur.com/ZLSNR.jpg Result 182512900911500121



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!