pk index 변경 하려고 했는데
삭제 후 다시 입력 해야된다고 해서
삭제 후 다시 입력 하려고 하는데요 .
index 생성이 않되네요 .
ㅇ위의 그림은 입력 해야될 테이블은 아니지만
ㅇ이름만 다르지 나모지 조건은 동일 합니다.
primary key 를 생성 해야되는데 .. 어찌 해야 되나요?
ALTER TABLE tb_public_land_master ADD CONSTRAINT pk_tb_public_land_master PRIMARY KEY CLUSTERED(YEAR_NAME,SREG,SEUB,SBUN1,SBUN2)
create index pk_tb_public_land_master on tb_public_land_master(YEAR_NAME,SREG,SEUB,SBUN1,SBUN2,ADDR)
위의 알터방식은 오류 나구요 . ( 중복이름 )
하단은 먼가 이상하다는 기분에 중간에 종료 했습니다.
넌클러스터 생성 처럼 간단할꺼라고 생각했는데 .. 완전히 벗어 났어요 ..
그림처럼 생성 해야되는데 .. 도와주세요
Comment 17
-
ssunsori
2014.02.03 13:19
답변감사합니다.
그런데 ~
pk를 바꾸고 싶은것이 아니고요 ~
생성해야됩니다.
현제 SP_HELPINDEX 테이블이름 하면 ... index 없다고 나옵니다.
pk 생성 해야되는데 .. 위의 방법대로 해두 않되서요 ~
제가 잘 몰라서 그러는데 .. 조금만 자세히 부탁드립니다.
-
김동우(탱소연)
2014.02.03 14:00
제목은 삭제했습니다 인데내용은 추가하고싶으시다는건가요..???하나의 테이블에 Cluster 인덱스는 하나뿐이 생성이 안되니까 기존꺼 삭제하고 다시 생성하는 방법 말씀해주신거같습니다본문에 PK가 클러스터 인덱스 상태에서 추가하시려는거면 안되는 것으로 알고있습니다이게 아닌가..ㅡㅜ -
ssunsori
2014.02.03 15:02
삭제 했다는 것이 테이블을 삭제 했다는 애기가 아니고 ..
pk_index 를 삭제 했다는 애기 입니다.
인덱스키 값을 변경 하려는 목적으로요 .
근데 .. pk 가 만들어 지지 않네요.
테이블 에서 실행 하면
"개체 'tb_public_land_master'에 인덱스가 없거나 권한이 없습니다."
이런 메시지가 나옵니다.
-
제가 질문을 잘 파악을 했는지 걱정이네요...
인덱스는 테이블이 다르면 같은 이름을 써도 무방합니다.
TBL1.INDEX1
TBL2.INDEX1
이렇게 만들 수 있죠.
하지만 프라이머리키는 오브젝트 입니다.
그래서 같은 DATABASE에 같은 이름으로 존재 할 수 없습니다.
만약 중복에러가 나는거라면 다른 이름으로 만들어보세요.
-
ssunsori
2014.02.03 15:13
exec sp_helpindex tb_public_land_master 실행시
아래와 같은 메시지가 나옵니다.
"개체 'tb_public_land_master'에 인덱스가 없거나 권한이 없습니다."
즉 , 제가 인덱스키 변경을 하려고 pk 인덱스를 삭제 하고 나서 재 생성 하려고 하는데 ..
생성이 않되서 올리는 질문 입니다.
답답하시겠지만 ..
맞게 올려주셨는데 .. 제가 이해를 못 한 것일 수도 ㅠㅠ
죄송합니다. 다시 한번 더 답변 부탁드립니다.
-
ALTER TABLE tb_public_land_master ADD CONSTRAINT pk_tb_public_land_master PRIMARY KEY CLUSTERED(YEAR_NAME,SREG,SEUB,SBUN1,SBUN2)
create index pk_tb_public_land_master on tb_public_land_master(YEAR_NAME,SREG,SEUB,SBUN1,SBUN2,ADDR)
지금 이렇게 두 문장을 실행하려고 했는데 에러가 났다는 거죠??
pk를 만들때 이미 인덱스는 만들어졌습니다. 두번째 문장때문에 에러가 나는거네요.
-
ssunsori
2014.02.03 16:09
윽 ..
둘다 각각 실행 했습니다.
상단은 중복 값이 있다고 하면서 한참 후에 오류를 뱉어 내구요 ...
하단은 몬가 이상한? 기분이 들어서 중단 했습니다
고로 현제 tb_public_land_master 에 인덱스가 없는 상태 입니다.
그래서 인덱스을 만들려고 하는데 .. 어찌 하는건지 도움요청 하는 겁니다;;;
그리고 본문의 그림은 제가 인덱스 삭제 하기전에 확인해 보니 index_name 만 다르지 다른건 전부 같아서
예를 올린 것 입니다.
-
김동우(탱소연)
2014.02.03 16:47
아래꺼는 해보시는게 어떤가요.;; 인덱스 자체를 생성하는거니까 어느정도 시간이 걸리는건 맞는거같은데..오류가 나더라도 어떤오류가 발생하는지는 봐야할거같은데;;아래분이 댓글쓰신거처럼 alter 하실때 pk를 걸려는 컬럼값들만 select 해서 중복되는 값이있는지 체크해야할거같아요...ㅎ -
ssunsori
2014.02.03 17:43
넵 바로 해보겠습니다.
오늘 따라 일이 너무 바쁘네요 ㅠㅠ
-
향지
2014.02.03 16:19
중복 인덱스 이름이 아니고
변경하려는 컬럼 조합으로
중복 되는 값들이 있는건 아닌지 확인 해보셨나요?
유니크 조건에 안맞아서 PK로는 안만들어지는것 같습니다.
-
ssunsori
2014.02.03 17:43
네 ~
그렇지않아도 확인 중 이였습니다.
-
엘리엘1
2014.02.03 16:48
/*-----------------------------------------------------------------------------------------
POINT - 상단은 중복 값이 있다고 하면서 한참 후에 오류를 뱉어 내구요 ...
-----------------------------------------------------------------------------------------*/
PK 하고자 하는 컬럼들 중에 중복 값을 먼저 조사 하세요.
-
ssunsori
2014.02.03 17:44
감사합니다.
확인 해 볼께요
-
ssunsori
2014.02.03 17:57
create index pk_tb_public_land_master on tb_public_land_master(YEAR_NAME,SREG,SEUB,SBUN1,SBUN2,ADDR)
실행 후 확인 해 보니 아래와 같이 넌클러스터로 잡혔네요;;
nonclustered located on PRIMARY
다시 지워야 겠네요 ~
근데 .. 위의 그림 처럼 인덱스 종류를 저렇게 주고 싶은데 어떻게 해야되나요?
-
김동우(탱소연)
2014.02.03 19:02
index_description 에 나와있는데로 표현되길 원하시면 PK로 생성하셔야하는거같아요해보니까 클러스터 인덱스로해도 위와 같이 안나오고 pk생성하면 나오네요index 삭제하시고alter table tb_public_land_masteradd constraint pk_tb_public_land_master primary key clustered(YEAR_NAME,SREG,SEUB,SBUN1,SBUN2,ADDR)해보시면 될듯요...중복값이 있으면 오류나요..ㅋ -
ssunsori
2014.02.04 08:51
다른 테이블 에서는 위의 컬럼으로 pk 값이 잡혀 있는데요 ..
저는 중복값이 있다고 생성이 되지 않네요
위에 보이는 것이 년도 / 지역 코드 / 번지 인데 .. 당연히? 중복이 있을수 있구요..
다른 테이블에서는 저 조건으로 어찌 pk를 잡았을까요?
PK를 만들면 인덱스도 같이 만들어집니다.
PK1이라는 PK를 만들면 PK1이라는 인덱스도 같이 만들어진다고 보시면 됩니다.
SP_HELPINDEX 테이블이름
해보시면 확인 할 수 있구요.
만약 PK를 바꾸고 싶다면.
ALTER TABLE 테이블이름 DROP CONSTRAINT....
하신 다음
ALTER TABLE 테이블이름 ADD CONSTRAINT....
하시면 되고
원래 PK였던 그 인덱스를 유지하고 싶다면 다른 이름으로 PK를 만들던지 새로 인덱스를 만들어주던지 하면 됩니다.