SQL Server 데이터베이스가 있고 큰 숫자로 시작 10010
하고 다른 테이블과 관련되어 있기 때문에 ID 열을 변경하고 싶습니다 . 이제 200 개의 레코드가 있으며 레코드가 증가하기 전에이 문제를 해결하려고합니다.
이 항목을 변경하거나 재설정하는 가장 좋은 방법은 무엇입니까?
답변
신원 열을 업데이트 할 수 없습니다.
SQL Server에서는 update 문을 사용하여 다른 열로 수행 할 수있는 것과 달리 ID 열을 업데이트 할 수 없습니다.
비슷한 종류의 요구 사항을 달성하기위한 몇 가지 대안이 있지만.
- 새 레코드에 대해 ID 열 값을 업데이트해야하는 경우
테이블의 현재 ID 값을 확인하고 필요한 경우 ID 값을 변경하는 DBCC CHECKIDENT 를 사용하십시오 .
DBCC CHECKIDENT('tableName', RESEED, NEW_RESEED_VALUE)
- 기존 레코드에 대한 ID 열 값을 업데이트해야하는 경우
사용 IDENTITY_INSERT 명시 적 값을 허용하는 테이블의 식별 컬럼에 삽입합니다.
SET IDENTITY_INSERT YourTable {ON|OFF}
예:
-- Set Identity insert on so that value can be inserted into this column
SET IDENTITY_INSERT YourTable ON
GO
-- Insert the record which you want to update with new value in the identity column
INSERT INTO YourTable(IdentityCol, otherCol) VALUES(13,'myValue')
GO
-- Delete the old row of which you have inserted a copy (above) (make sure about FK's)
DELETE FROM YourTable WHERE ID=3
GO
--Now set the idenetity_insert OFF to back to the previous track
SET IDENTITY_INSERT YourTable OFF
답변
질문이 바로 있다면 다음과 같은 일을하고 싶습니다.
update table
set identity_column_name = some value
쉬운 과정이 아니며 관련 과정이있을 수 있으므로 사용하지 않는 것이 좋습니다 foreign key
.
그러나 여기 그것을 할 단계는, 테이크 바랍니다 back-up
테이블을
1 단계-테이블의 디자인 뷰 선택
2 단계-ID 열 끄기
이제 update
쿼리를 사용할 수 있습니다 .
이제 redo
1 단계와 2 단계에서 ID 열을 켭니다.
답변
당신은 필요
set identity_insert YourTable ON
그런 다음 행을 삭제하고 다른 ID로 다시 삽입하십시오.
삽입을 완료하면 identity_insert를 끄는 것을 잊지 마십시오
set identity_insert YourTable OFF
답변
--before running this make sure Foreign key constraints have been removed that reference the ID.
--set table to allow identity to be inserted
SET IDENTITY_INSERT yourTable ON;
GO
--insert everything into a temp table
SELECT *
INTO #tmpYourTable
FROM yourTable
--clear your table
DELETE FROM yourTable
--insert back all the values with the updated ID column
INSERT INTO yourTable (IDCol, OtherCols)
SELECT ID+1 as updatedID --put any other update logic to the ID here
, OtherCols FROM #tmpYourTable
--drop the temp table
DROP TABLE #tmpYourTable
--put identity back to normal
SET IDENTITY_INSERT yourTable OFF;
GO
답변
사용해보십시오 DBCC CHECKIDENT
:
DBCC CHECKIDENT ('YourTable', RESEED, 1);
답변
ID 열이없는 새 테이블에 테이블을 복사하십시오.
select columns into newtable from yourtable
새로운 시드로 newtable에 ID 열을 추가하고 기본 키로 만듭니다.
ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY
답변
DBCC CHECKIDENT(table_name, RESEED, value)
table_name = 재설정하려는 테이블을 제공하십시오.
value = 초기 값은 0으로, ID 열을 1로 시작합니다.