Member 7909353 Ответов: 4

Преобразование значения varchar переполняло столбец int.


Я хочу выбрать запись
ISNULL( MAX(CAST(RIGHT('012016031800001',15) AS VARCHAR(15))), 0) + 1


это дает ошибку типа

Преобразование значения varchar
'012016031800001'

переполненная колонна int.

Что я уже пробовал:

SELECT ISNULL( MAX(CAST(RIGHT('012016031800001',15) AS VARCHAR(15))), 0)+1

4 Ответов

Рейтинг:
2

OriginalGriff

Ну...да.
Максимум вы можете попасть в интервал, равно 2 147 483 647
И вы пытаетесь добавить один к:

012016031800001
     2147483647
Видите, в чем проблема?
Я не совсем понимаю, почему вы это делаете: приведение VARCHAR уже не нужно, и ISNULL также довольно избыточен к этому моменту.
Это может быть то, что вам нужно:
SELECT MAX(CAST(RIGHT('012016031800001',15) AS BIGINT))+1


Но...Если вы пытаетесь использовать это для создания уникальных идентификаторов заранее, это плохая идея!


Рейтинг:
2

Karthik_Mahalingam

вы пытаетесь добавить varchar значение с помощью integer ценность
попробовать это

DECLARE @MAXCODE varchar(15);
SELECT  @MAXCODE=ISNULL( MAX(CAST(RIGHT('012016031800001',15) AS VARCHAR(15))), 0) +'1'
PRINT @MAXCODE
print len( @maxcode)


DECLARE @MAXCODE varchar(16);
SELECT  @MAXCODE=ISNULL( MAX(CAST(RIGHT('012016031800001',15) AS VARCHAR(15))), 0) +'1'
PRINT @MAXCODE
print len( @maxcode)


Рейтинг:
18

Member 7909353

CONVERT(BIGINT, ISNULL( MAX(CAST(RIGHT('022016031800001',15) AS VARCHAR(15))), 0))+1


Рейтинг:
1

User-12551084

Максимальное значение в

2147483648


как получить максимальное значение int.
Select Power(cast(2 as varchar),(32) -1) as 'int max range'  from sys.types Where name = 'Int' 


вы можете вы BIGINT вместо Int
SELECT MAX(CAST(RIGHT('012016031800001',15) AS BIGINT))+1