[sql] SQL Server에서 ID 열을 업데이트하는 방법은 무엇입니까?

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쿼리를 사용할 수 있습니다 .

이제 redo1 단계와 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로 시작합니다.