현재 게시판 글쓰기 작업을 하고있는데
IDENTITY_INSERT가 OFF로 설정되면 테이블 'OpenBoards'의 ID 열에 명시적 값을 삽입할 수 없습니다.
Comment 15
-
이리
2016.05.26 11:00
-
식뽕
2016.05.26 11:20
네.. 그래서 set identity_insert '테이블' on 했는데 명령이 완료 되었다고 나오는데.. 그래도 에러는 같은게 뜨네요
그리고 identity를 끄고 글을 작성하면 당연히 seq값은 0으로 나오고 글을 하나밖에 작성으 하지 못하구요..
-
이리
2016.05.26 11:41
근데 궁금한점은 강제로 값을 넣는데 굳이 IDENTITY를 사용하시는 이유가 있는지..
-
식뽕
2016.05.26 12:52
제가 디비는 배우기 시작한지 얼마 되지 않았는데..게시판을 구현해보려고 하던도중
글번호에 identity를 적용하면서 자동으로 1씩 증가하게 하려고 하는데 제가 이해를 잘 못하는 것 같네요..
identity를 적용하지 않으면 어떻게 해야할까요?
-
이리
2016.05.26 13:03
IDENTITY를 적용하셨다면 그 컬럼에는 값을 넣지 않으시는게 맞습니다.
예를 들어
create table t1
(
a int identity(1, 1)
, b nvarchar(max)
, c datatime
)
위와같이 테이블을 만드셨다면
insert into t1(b, c)
values(N'동해물과백두산이', getdate())
삽입을 위와같이 하시면
select * from t1
a b c
1 동해물과백두산이 2016년 05월 25일.....
위와 같은 결과를 보실 수 있을겁니다.
-
식뽕
2016.05.26 14:06
감사합니다 덕분에 이해하는데 조금 수월 해졌습니다..
그런데 왜 게시판 글쓰는 페이지에서는
IDENTITY_INSERT가 OFF로 설정되면 테이블 'OpenBoards'의 ID 열에 명시적 값을 삽입할 수 없습니다.
이렇게 뜰까요 ㅠㅠ -
이리
2016.05.26 14:11
테이블 명세와 INSERT 구문을 알수 있을까요?
IDENTITY 컬럼에 INSERT가 되는거 같습니다.
위에 적은대로 IDENTITY 컬럼은 INSERT 구문에서 제외하여야 합니다.
-
식뽕
2016.05.26 14:19
public ActionResult Create() {return View();}// POST: /Board/Create[HttpPost][ValidateAntiForgeryToken]public ActionResult Create(OpenBoard board) {if(ModelState.IsValid) {board.ins_dt = DateTime.Now.ToString("yyyyMMdd");db.OpenBoard.Add(board);db.SaveChanges();return RedirectToAction("Index");}return View(board);}테이블 명세는 첨부에 올렸습니다.. -
이리
2016.05.26 14:29
C# 소스 말고 쿼리 구문은 없나요?
소스만 보자면 ins_dt 컬럼에 현재 날짜를 넣는거 밖에 안되는거 같은데요..
-
식뽕
2016.05.26 14:36
아.. 포스트에 날짜입력하는것만 넣고 글번호를 안넣은것 같습니다...
이제 막 혼자 하려다보니 너무 앞서나갔던것 같습니다..
그럼 [HttpPost] 아래에 board.seq 하고 어떻게 입력을 해줘야 하나요?
-
이리
2016.05.26 14:45
seq가 IDENTITY라면 아무것도 넣지 않는게 맞습니다.
profiler를 사용하여 실제 어떤 쿼리가 실행이 되는지 확인 할 필요가 있을 거 같습니다.
-
식뽕
2016.05.26 15:01
쪽지 확인좀 해주실수있을까요?
// set identity_insert '테이블명' on 하면 사용자가 글번호포함 모든 컬럼을 작성할수있는 권한을 갖는 다는것은 알았습니다.
그런데 off를 하면 모든 권한을 갖지 못하게 되나요? 그럼 제목, 이름 등등만 on을 해야하는게 맞나요?
그렇게 하려면 쿼리문에서 돌려야 하면 어떻게 작성을 해야할까요?
-
이리
2016.05.26 15:15
자동증가를 사용하려면 보통은 SET IDENTITY_INSERT는 건드리지 않습니다.
영향을 받는것은 IDENTITY로 설정된 컬럼만 입니다.
쿼리문에서 돌려야 하는건 제가 위에 적은 예시를 참고하시면 될 거 같습니다.
-
식뽕
2016.05.26 15:27
많이 도움 되었습니다 감사합니다 ^^
-
ilovejsp
2016.05.26 11:21
identity 컬럼명을 쓰고있는 테이블에서 임의로 데이터에 대해 insert를 하면 에러가 나게 됩니다.
그래서 set identity_insert [table이름] on으로 설정하고 나서 데이터를 insert하시면됩니다.
근데주의할점은 1개 테이블이 아니라 여러개에 테이블에 대해서 insert를 할때
전에 on으로 사용한 테이블명을 off로 설정하고 나서
새로운 테이블에 대해 on으로 바꿔줘야 바뀝니다.
예를 들어 TABLE1,TABLE2가 있고 각각 IDENTITY 속성이 있을때
SET IDENTITY_INSERT TABLE1 ON
INSERT TABLE1
SET IDENTITY_INSERT TABLE1 OFF
SET IDENTITY_INSERT TABLE2 ON
INSERT TABLE2
SET IDENTITY_INSERT TABLE2 OFF
이렇게해줘야합니다.
이거몰라서 예전에 엄청고생한기억이...
IDENTITY(1, 1) 속성은 자동 증가 입니다.
따라서 컬럼에 값을 삽입하면 에러가 납니다.
강제로 값을 삽입하려면 IDENTITY_INSERT 를 ON으로 설정하시면 됩니다.