초보개발자z01
50
2021-04-15 10:19:01
5
135

[MSSQL] SQL 쿼리 관하여 질문드립니다!


안녕하세요.


INSERT 쿼리를 짜고 있는데요...

(시퀀스 관련)


시퀀스를 'G001'  이런식으로 구성하려고 합니다. 그리고 당연히 'G002' , 'G003' ... 이렇게 증가 시키고 싶은데요

문제는.. G에 해당되는 컬럼이 따로 있는데 이걸 CONCAT으로 합쳐서 생성하는 형식인데..

이걸 +1씩 증가 시킬려고 하니..  varchar 값 'G001'을(를) 데이터 형식 int(으)로 변환하지 못했습니다.

이라는 에러가 뜹니다.. G때문에 증가가 안되는거 같긴한데 해결법이 있을까요..?

0
  • 답변 5

  • 보후리
    430
    2021-04-15 10:35:23

    제공하는 시퀀스 사용안하고  


    시퀀스 테이블을 따로 만들어서, insert 하기전에 

    시퀀스 테이블에서 값 가져와서 +1 시키고 문자열붙이고 


    그값을 insert 하는 식으로 사용하는 방법이 있을거같습니다 


  • 초보개발자z01
    50
    2021-04-15 10:40:13 작성 2021-04-15 10:40:28 수정됨

    @보후리

    지금 쿼리를 짜놓은게 


    INSERT INTO T_DK_PROGSS_ITEM 

    ( INDT_NO

    ) VALUES

    ((SELECT CONCAT('G',RIGHT('00' + ISNULL(MAX(A.INDT_NO), 0) + 1 , 3))

       FROM T_DK_PROGSS_ITEM A WITH(NOLOCK)

       WHERE A.COMPANY_CD = ''

       AND A.PLANT_CD   = ''

       AND A.DOCK_NO   = '')


    이런식입니다!

  • 카스마당
    1k
    2021-04-15 10:59:52

    이건 현재의 문제점을 해결해도 추후 문제 재발 가능성이 높습니다.

    시퀀스가 4자리가 사실 말이 안됩니다. 추후 4자리(A-Z, 999) 가 차면 어찌할까요.?  유지보수 발생합니다.

    시퀀스 처리 방법을 변경하세요. 자동증가나 시퀀스 테이블 만들어서 하셔야 됩니다.

    MSSQL2012에서는 시퀀스도 지원하네요.

  • 초보개발자z01
    50
    2021-04-15 11:13:15

    @카스마당

    답변 감사합니다.


    최대가 999지만


    999까지조차 갈 일이 전혀 없어서 그렇습니다 ㅎ

  • 웃음천사
    57
    2021-04-16 11:02:15

    시퀀스를 사용하는 최종적인 목적은

    동시성 (해당 테이블의 동시에  insert)시 데이터의 무결성에 목표가 있습니다.

    작성자분께서 의견주신대로 구현은 가능합니다 .(G0001)만

    성능테스트(동접자) 바로 문제가 됩니다.

    하여 기본적인 시퀀스 사용을 추천드리며

    업무상 필요한 키라면 (예:주문번호) 별도의 칼럼을 구성하여 사용을 추천드립니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.