[MSSQL]Insert실행시 자동증가되는 IDENTITY값 바로 가져오기



insert를 실행시키고 자동으로 증가 되도록 해놓은 PK값이 바로 필요한 경우가 있다.


A테이블에 값이 입력되면 그 값에 종속되는 B테이블의 값을 넣어야 하는데


PK를 알아오기 위해서 insert후 다시 select 하더라도 한 컨트롤러에서 해결하기란 힘들다.


게다가 해당 pk값을 모르기 때문에 다시 select 하는 것도 문제.


해결 방법


1
2
SELECT @@IDENTITY
 
cs

이걸 사용 하는 것 이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
 
INSERT INTO 
        T_AUTH
        (
         VAL1
        ,VAL2
        ,VAL3)
values(
        #{VAL1}
        ,#{VAL2}
        ,#{VAL3})
 
SELECT @@IDENTITY AS SEQ
cs



이런식으로 사용 하면


SEQ라는 컬럼에 자동증가된 값을 반환 한다


참고로 MYBAITIS에서는


INSERT가 아니라 SELECT로 감싸줘야 정상 작동 한다


예를 들어


1
2
3
4
5
6
7
8
9
10
11
12
13
14
<select id="insertAuth" parameterType="VO" resultType="VO">
    INSERT INTO 
        T_AUTH
        (
         VAL1
        ,VAL2
        ,VAL3)
    values(
        #{VAL1}
        ,#{VAL2}
        ,#{VAL3})
 
    SELECT @@IDENTITY AS SEQ
</select> 
cs



이런식으로 만들면 VO SEQ에 해당 값이 담겨서 리턴 된다.


MariaDB의 외래키 설정을 하던중 처음 보는 에러 메세지가 나타났다


mysql foreign key constraint is incorrectly formed



외래키가 올바르지 않다 뭐 이런 의미인것 같아 저 에러창이 떴던 이유를 찾아보니


1. 한쪽은 not Null 인데 한쪽은 null 허용일때


다시말해 대상이 되는 키가 null이면 참조할때 문제가 발생할수 있기 때문에 나타나는 에러이다.



2. 참조되어지는 컬럼이 PK,unique가 아닐때

 외래키로서의 기능에 에러가 날수 있기 때문에 저 에러 메세지가 뜬다고 한다.


생각해보면 맞는 말이긴 하다.



 

+ Recent posts