도와주세요! 예를 들어, 1, 2, 4, 6, 8, 10, 11 .... 등 의 ID 필드가있는 테이블이 있습니다.SQL 서버에서 ID 열 값을 재정렬하십시오
순차적으로 만들고 싶습니다. , 1,2,3,4,5,6,7 ... 방울 사용하지 않고
감사합니다.
도와주세요! 예를 들어, 1, 2, 4, 6, 8, 10, 11 .... 등 의 ID 필드가있는 테이블이 있습니다.SQL 서버에서 ID 열 값을 재정렬하십시오
순차적으로 만들고 싶습니다. , 1,2,3,4,5,6,7 ... 방울 사용하지 않고
감사합니다.
수 없습니다. identity
열을 업데이트 할 수 없습니다. (또는 적어도 정상적인 방법으로는 불가능합니다. 테이블에서 모든 행을 삭제 한 다음 IDENTITY_INSERT
으로 다시 삽입하십시오.
또한 identity
의 간격은 용어로 사용하는 것이 가장 좋은 방법입니다 와! 표시 목적으로 인접한 일련의 숫자가 필요한 경우 ROW_NUMBER
을 사용할 수 있습니다.
신원 정보에는 공백이 생기며 나중에 롤백되는 레코드뿐만 아니라 롤백 된 모든 레코드에 대해 소모됩니다. – HLGEM
새 필드를 만들어서 1에서 시작하는 종자가되게 한 다음 이전 열을 삭제하고 새 열의 이름을 바꾼 다음 (모든 FK 참조를 다시 작성하는 이유는 무엇입니까?)
SQL Server에서는 열의 ID 속성을 변경할 수 없습니다. 원본 열 전체를 삭제하고 새 ID 열을 만들어야합니다. 새 주문이 이전 주문과 일치한다는 보장은 없습니다. –
@ 마틴 - 사실이 아닙니다. SQL Server 2005/2008 관리자의 UI를 통해 열을 변경하여 열의 자동 번호 (ID) 속성을 제거 할 수 있습니다 (테이블을 마우스 오른쪽 단추로 클릭하고 "디자인"선택). –
실제로 장면 뒤에서 전체 테이블을 다시 작성합니다. 도구 모음에서 "스크립트"아이콘을 클릭하여 생성 된 SQL을 확인하십시오. –
쉬운 방법이 없기 때문에해야 할 이유가 없습니다. 그러나 비슷한 기능을 제공하기 위해 뷰를 구성 할 수 있습니다.
CREATE VIEW MyTableView AS SELECT ROW_NUMBER() OVER (ORDER BY Identity) AS RowNum, * FROM MyTable
그런 다음 클라이언트를 대신 MyTableView에서 선택하십시오.
뷰와 테이블의 이름이 같아야 이전 버전과의 호환성을 보장 할 수 있으므로 물론 테이블 이름을 바꾼 다음 이전 테이블 이름으로 뷰를 만들 수 있습니다.
질문을 완전히 잘못 읽었을 때 대답이 수정되어야합니다. –
DBCC CHECKIDENT (< '테이블 이름'>, RESEED, < '테이블의 마지막 순서 **'>)를 입력 할 때
이 **이 수에 1을 더한 (+1)을 만들 것입니다. 즉 새로운 레코드에 대해 38가되어야하므로이 값으로 37이 사용됩니다.
나는 ... 당신이 그것을 좋아하는 경우에 그 시도 .. 가장 좋은 방법이라고 생각
DECLARE @INC AS INTEGER
SET @INC = 1
WHILE (@INC <= 7582) --7582 is rowcount of table
BEGIN
UPDATE YourTable
SET ID = @INC
WHERE ID = (
SELECT MIN(ID) AS T
FROM YourTable
WHERE ID > @INC
) --ID=> Identity column
SET @INC = @INC + 1
END
참고 : 열 신원 삽입물을 분리 할 필요가 있음을 실행하기 전에.
아래의 답변 외에도 레코드를 고유하게 식별하는 것 외에도이 ID 필드에 첨부 된 의미가 없어야합니다. 송장 번호 또는 포장 번호 또는 누군가에게 어떤 것을 의미하는 다른 종류의 번호가 있어서는 안됩니다. – Leslie
왜 이것을하고 싶습니까? –