2014-05-14 3 views
0

하자 내가이 테이블이 있다고TSQL : PK-Identity의 값을 수정할 수 있습니까?

Id(PK)  Country   Capital City 
+--------+---------------+------------------+ 
+ 1 + USA  + Washington, D.C. + 
+--------+---------------+------------------+ 
+ 2 + Japan  + Tokyo   + 
+--------+---------------+------------------+ 

내가 France-Paris을 삽입 할 경우. 하지만 그 행에 Id = 1, USA Id = 2, Japan Id = 3이 필요합니까?

SQL을 사용하여이를 수행 할 수있는 방법이 있습니까? 내가 할 일은 수동으로 수행 할 스크립트를 생성하는 것입니다. 그러나 다른 방법이 있다면 그것을 적용하고 싶습니다.

도움을 주셔서 감사합니다.

+3

이 예제에서 PK의 값이 중요한 이유는 행을 고유하게 식별하는 데 사용되는 것입니다. 그리고 FK 제약을 어떻게 다룰 것입니까? –

+0

이전에 사용되던 테이블을 재구성하고 있기 때문에. 정상적인 상황에서는 걱정하지 않을 것입니다. – Richard77

답변

2

네,하지만 값을 잘못 입력하는 것은 좋지 않습니다. IDENTITY_INSERT

SET IDENTITY_INSERT dbo.Country ON 
--Do your manipulation here. 
INSERT INTO dbo.County(Id, country, [Capital City]) SELECT 1, 'France', 'Paris' 
SET IDENTITY_INSERT dbo.Country OFF 

하지만를 사용 : 당신은 정체성과 기본 키를 가지고 있고 그래서 당신은 ID 열을 드롭해야하고 당신이 IDENTITY 열을 업데이트 할 수 없기 때문에 그것을 다시 만들기에 대해 값을 셔플해야합니다. 당신이 이것에 의존하는 다른 테이블을 가질 수 있다면, 이것은 가치가있는 것보다 더 많은 문제가 될 것입니다. 프랑스를 1 위 자리에 오르기가 정말로 필사적이라면 FK를 사용 중지하고 ID 열을 새 열로 복사 한 다음 원하는 위치에 값을 삽입하고 숫자가 순차적이며 마지막으로 ID와 기본 키를 다시 만들고 외래 키를 다시 활성화하십시오.

보조 메모로 개체 이름에 공백을 두지 마십시오.

+0

실제로 ID가 아닌 별도의 고유 한 Order 필드를 사용하여 계단식 및 키 무효화 문제없이 응용 프로그램 계층을 검색하고 정렬 순서를 지정할 수 있습니다. – TomTom

+0

예, Pk 값을 변경하는 데 OP가 이상하게 설정되었지만 매우 사실입니다. –

관련 문제