관리 메뉴

드럼치는 프로그래머

[DBMS] varchar 값을 변환하는 중 int 열이 오버플로되었습니다. 최대 정수 값을 초과했습니다. 본문

★─Programing/☆─DBMS

[DBMS] varchar 값을 변환하는 중 int 열이 오버플로되었습니다. 최대 정수 값을 초과했습니다.

드럼치는한동이 2017. 3. 21. 13:40

right("000000"+convert(varchar(6),@last_num),6)
<== 이부분의 @last_num 과 "000000" 이 덧셈으로 더해 지져...?

그럼 int 맞잖아여...
제가 보기엔
@last_num 을 bigint 로 지정하심이....

저 같은 경우에 썼던 주문번호 생성은..

declare @ordnum char(14)

SELECT @ordnum= convert(char(14),convert(bigint,MAX(ORDNUM))+1) FROM SALEMAST
WHERE OrdNum Like @ymd

if @ordnum is null
set @ordnum = convert(char(8), getdate(),112) + "000001"


> 손님 님이 쓰신 글
> ----------------------------------------------------------
> OS : Microsoft Windows 2000 Server / Advanced Server
> SQL : Microsoft SQL Server 2000 Standard / Enterprise Edition
>
> 주문번호를 만드는 프로시져인데 날짜 YYYYMMDD다음6자리 순번을 붙입니다.
> 헌데
> @yyyymmdd+right("000000"+convert(varchar(6),@last_num),6);
> 이 부분에서 자꾸 아래와 같은 에러가 납니다.
> varchar 값 "20040413000052"을(를) 변환하는 중 int 열이 오버플로되었습니다. 최대 정수 값을 초과했습니다.
>
> varchar로 값을 반환하는데 위와 같이 int 열에 오버플로워 에러는 좀 이해할수없는데 무엇이 잘못인지...
>
>
> alter procedure get_ordno
> @ord_no varchar(100) output
> as
> declare @yyyymmdd varchar(8)
> declare @last_num int
> -------------------------------------
> select @yyyymmdd=convert(varchar,getdate(),112)
>
> --대충 이부분에서 @last_num 값을 DB에서 가져오는데 1 ,2 ,3 뭐 이런 숫자로 가져옵니다.
>
> set @ord_no=@yyyymmdd+right("000000"+convert(varchar(6),@last_num),6);
> return @ord_no
> go
>
> declare @ord_no varchar(30)
> exec get_ordno @ord_no output
> select @ord_no as "주문번호"
>
>

 

[출처] http://www.sqler.com/74630

Comments