복붙노트

[SQL] 기존 컬럼에 ID를 추가

SQL

기존 컬럼에 ID를 추가

나는 식별 컬럼에 테이블의 기본 키를 변경해야하고, 테이블에있는 행의 수는 이미있다.

나는 일에 그들에게있는 거 순차적 시작을 보장하기 위해 ID를 정리하는 스크립트를 가지고, 내 테스트 데이터베이스에서 잘 작동합니다.

신원 속성을 가지고 열을 변경할 수있는 SQL 명령은 무엇입니까?

해결법

  1. ==============================

    1.당신은 정체성에 대한 기존의 열을 변경할 수 없습니다.

    당신은 정체성에 대한 기존의 열을 변경할 수 없습니다.

    당신은 두 가지 옵션이 있습니다,

    다음은 새로 생성 된 ID 열에서 기존 데이터 값을 유지할 수 있습니다 1. (새로운 테이블)에 접근.

    CREATE TABLE dbo.Tmp_Names
        (
          Id int NOT NULL
                 IDENTITY(1, 1),
          Name varchar(50) NULL
        )
    ON  [PRIMARY]
    go
    
    SET IDENTITY_INSERT dbo.Tmp_Names ON
    go
    
    IF EXISTS ( SELECT  *
                FROM    dbo.Names ) 
        INSERT  INTO dbo.Tmp_Names ( Id, Name )
                SELECT  Id,
                        Name
                FROM    dbo.Names TABLOCKX
    go
    
    SET IDENTITY_INSERT dbo.Tmp_Names OFF
    go
    
    DROP TABLE dbo.Names
    go
    
    Exec sp_rename 'Tmp_Names', 'Names'
    

    당신은 새로 생성 된 ID 열에서 기존 데이터 값을 유지할 수 없습니다 2 (새 열)에 접근, 신원 열은 숫자의 순서를 개최한다.

    Alter Table Names
    Add Id_new Int Identity(1, 1)
    Go
    
    Alter Table Names Drop Column ID
    Go
    
    Exec sp_rename 'Names.Id_new', 'ID', 'Column'
    

    자세한 내용은 다음 Microsoft SQL 서버 포럼 게시물을 참조 :

    정체성 (1,1) 컬럼을 변경하는 방법

  2. ==============================

    2.SQL 2005 이상에서는 테이블의 데이터 페이지를 변경하지 않고이 문제를 해결하는 트릭이있다. 이 분 시간이 걸릴 수있는 모든 데이터 페이지를 만져 대형 테이블 중요하다. 트릭은 식별 컬럼은 기본 키입니다 간단한 "추가 / 삭제 / 이름 변경 열"솔루션을 여행 할 수있는 클러스터 또는 비 클러스터형 인덱스, 또는 다른 개는의 일부인 경우에도 작동합니다.

    SQL 2005 이상에서는 테이블의 데이터 페이지를 변경하지 않고이 문제를 해결하는 트릭이있다. 이 분 시간이 걸릴 수있는 모든 데이터 페이지를 만져 대형 테이블 중요하다. 트릭은 식별 컬럼은 기본 키입니다 간단한 "추가 / 삭제 / 이름 변경 열"솔루션을 여행 할 수있는 클러스터 또는 비 클러스터형 인덱스, 또는 다른 개는의 일부인 경우에도 작동합니다.

    여기에 트릭 : 당신은 당신이 동일한 테이블 스키마를 가진 IDENTITY있는 테이블을 대체 할 수있는 의미있는 데이터를 변경하지 않고 테이블의 스키마를 변경하는 SQL 서버의 ALTER TABLE ... SWITCH 문을 사용하지만 IDENTITY 열없이 할 수 있습니다. 같은 트릭은 기존 열 IDENTITY을 추가하기 위해 노력하고 있습니다.

    일반적으로, ALTER TABLE은 ... SWITCH 효율적으로 비어있는 새 파티션으로 분할 된 테이블에 전체 파티션을 대체하는 데 사용됩니다. 그러나 그것은 또한 너무 비 분할 된 테이블에서 사용할 수 있습니다.

    나는 5 초 이내에, 변환이 트릭을 사용했습니다 순서대로 비 IDENTITY (에 IDENTITY에서 25 억 행 테이블의 컬럼은 그 쿼리 계획보다 비 IDENTITY에 대한 일을 다 시간 쿼리를 실행합니다 다음 컬럼)을 5 초 미만에 다시 아이덴티티 설정을 복원.

    여기 그것이 작동하는 방법의 코드 샘플입니다.

     CREATE TABLE Test
     (
       id int identity(1,1),
       somecolumn varchar(10)
     );
    
     INSERT INTO Test VALUES ('Hello');
     INSERT INTO Test VALUES ('World');
    
     -- copy the table. use same schema, but no identity
     CREATE TABLE Test2
     (
       id int NOT NULL,
       somecolumn varchar(10)
     );
    
     ALTER TABLE Test SWITCH TO Test2;
    
     -- drop the original (now empty) table
     DROP TABLE Test;
    
     -- rename new table to old table's name
     EXEC sp_rename 'Test2','Test';
    
     -- update the identity seed
     DBCC CHECKIDENT('Test');
    
     -- see same records
     SELECT * FROM Test; 
    

    이것은 분명히 다른 답변에서 솔루션보다 더 복잡하지만, 테이블이 큰 경우이 실제 생활을 절약 할 수 있습니다. 몇 가지주의 사항이 있습니다 :

    위의 요구 사항을 자세히 TechNet의 좋은 기사가있다.

    UPDATE - 에릭 우 그 아래에 댓글이 솔루션에 대한 중요한 정보를 추가했다. 하기 위해 여기를 복사하면 확인이 더 많은 관심을 가져옵니다

    테이블이 적극적으로 새로운 행으로 확장되는 경우 (새 행을 IDENTITY를 추가하고 추가 사이의 다운 타임, 다음 대신 DBCC CHECKIDENT의 수동으로 새 테이블 스키마의 ID 시드 값을 설정할 수 있습니다 많은 경우에 당신이하지 않아도 의미 당신은 트랜잭션에서 ALTER TABLE ... SWITCH와 DBCC CHECKIDENT를 모두 포함 할 수 있습니다. 테이블, 예를 들어 IDENTITY (2435457, 1)에서 가장 규모가 큰 기존의 ID보다 크게 (또는 이것도 아니고 ... 테스트하지 않았습니다 이)하지만 쉽고 안전하게 될 것입니다 수동으로 시드 값을 설정처럼 보인다.

    새로운 행이 테이블에 추가되고 있지 (또는 그들은 단지 매일 ETL 프로세스처럼, 때로는가 추가 될) 경우 DBCC CHECKIDENT는 벌금 그래서 분명히,이 경쟁 조건이 발생하지 않습니다.

  3. ==============================

    3.당신은 IDENTITY 열이 될 수있는 열을 변경할 수 없습니다. 당신이 수행해야하는 것은 다음은 Get-이동에서 IDENTITY로 정의 된 새 열을 생성 된 열을 삭제, 이전의 이름에 새 이름을 바꿀 수 있습니다.

    당신은 IDENTITY 열이 될 수있는 열을 변경할 수 없습니다. 당신이 수행해야하는 것은 다음은 Get-이동에서 IDENTITY로 정의 된 새 열을 생성 된 열을 삭제, 이전의 이름에 새 이름을 바꿀 수 있습니다.

    ALTER TABLE (yourTable) ADD NewColumn INT IDENTITY(1,1)
    
    ALTER TABLE (yourTable) DROP COLUMN OldColumnName
    
    EXEC sp_rename 'yourTable.NewColumn', 'OldColumnName', 'COLUMN'
    

    즙을 짜고 난 찌꺼기

  4. ==============================

    4.여기에 설명 된 시원한 해결책이 있습니다 : SQL 서버 - 추가 또는 열에서 신원 속성을 제거

    여기에 설명 된 시원한 해결책이 있습니다 : SQL 서버 - 추가 또는 열에서 신원 속성을 제거

    짧은 수동으로 편집 SQL 관리자에서 테이블에서 그냥 변경 만들어집니다 스크립트를 보여 복사하고 나중에 사용, 신원, DO NOT 변경 사항 저장을 전환합니다.

    그것은 (스크립트) 변경 테이블 관련 등 모든 외부 키, 인덱스를 포함하고 있기 때문에, 엄청난 시간을 절약 할 수 있습니다. 이 수동으로 ... 하나님이 금을 writting.

  5. ==============================

    5.IDENTITY 대신 SEQUENCE를 사용하는 것이 좋습니다.

    IDENTITY 대신 SEQUENCE를 사용하는 것이 좋습니다.

    SQL 서버 2014 (I 낮은 버전 모르는)에서 당신은 순서를 사용하여, 간단하게이 작업을 수행 할 수 있습니다.

    CREATE SEQUENCE  sequence_name START WITH here_higher_number_than_max_existed_value_in_column INCREMENT BY 1;
    
    ALTER TABLE table_name ADD CONSTRAINT constraint_name DEFAULT NEXT VALUE FOR sequence_name FOR column_name
    

    여기에서 : 컬럼의 디폴트 값으로 순서

  6. ==============================

    6.간단한 설명

    간단한 설명

    sp_rename을을 사용하여 기존 열 이름 바꾸기

    EXEC sp_rename을 'Table_Name.Existing_ColumnName', 'New_ColumnName', 'COLUMN'

    이름 바꾸기에 대한 예 :

    기존의 칼럼은 OldUserID 아이디로 변경되고

    EXEC sp_RENAME 'AdminUsers.UserID' , 'OldUserID', 'COLUMN'
    

    그런 다음 기본 키 및 ID 값으로 설정하는 ALTER 쿼리를 사용하여 새 열을 추가

    ALTER TABLE TableName ADD Old_ColumnName INT NOT NULL PRIMARY KEY IDENTITY(1,1)
    

    설정 차 키에 대한 예

    새로운 생성 된 열 이름은 사용자 ID입니다

    ALTER TABLE Users ADD UserID INT NOT NULL PRIMARY KEY IDENTITY(1,1)
    

    다음 이름을 바꾼 열을 삭제

    ALTER TABLE Table_Name DROP COLUMN Renamed_ColumnName
    

    드롭에 대한 예는 열 이름

    ALTER TABLE Users DROP COLUMN OldUserID
    

    이제 우리는 테이블에 기존 열을 기본 키 및 ID를 추가하고 있습니다.

  7. ==============================

    7.나는 개발자로서, 나는 DBA 권한을 얻을 수있는 DBA 하나없이 팀에 얻을 수 있었던 자바 개발자입니다. 나는 DBA를하지 않고 있으므로, 두 개의 데이터베이스 사이의 전체 스키마를 이동하는 임무했다, 나는 그것을 내가 관리자 권한을 가지고 있지 않았기 때문에 SQL Server 2008의 GUI를 사용할 수없는, 스크립트를 실행하여 작업을 수행했다.

    나는 개발자로서, 나는 DBA 권한을 얻을 수있는 DBA 하나없이 팀에 얻을 수 있었던 자바 개발자입니다. 나는 DBA를하지 않고 있으므로, 두 개의 데이터베이스 사이의 전체 스키마를 이동하는 임무했다, 나는 그것을 내가 관리자 권한을 가지고 있지 않았기 때문에 SQL Server 2008의 GUI를 사용할 수없는, 스크립트를 실행하여 작업을 수행했다.

    새로운 스키 마에서 저장 프로 시저를 실행할 때 모두가 문제없이 이동했다, 그러나, 나는 테이블의 ID 필드를 잃었 발견했다. 나는 두 번 테이블을 만든 스크립트를 확인하고 내가 스크립트를 실행했을 때, 그러나, SQL 서버를 거기에 도착하지 않았다이었다. 나는 그 전에이 같은 문제를 보았다고하는 DBA 나중에 들었다.

    어떤 경우, SQL 서버 2008,이 내가이 해결 얻을하는 데 걸린 단계는 내가 누군가에게 도움이 될 것입니다 희망에 여기를 게시하도록하겠습니다 그래서 그들은했다. 이것은 내가 FK이 더 어려워 다른 테이블에 종속했다으로 내가 한 것입니다 :

    나는 신원이 실제로 없어진 확인하고 테이블에 종속성을 보려면이 쿼리를 사용했다.

    1) 테이블에 대한 통계를 찾기 :

    exec sp_help 'dbo.table_name_old';
    

    2) 중복, 동일한 새 테이블을 만들고, 그 전에 있었던 PK 필드에 신원 필드를 추가 예외입니다.

    데이터 이동 3.) 안 신원.

    SET IDENTITY_INSERT dbo.table_name ON 
    

    4) 데이터를 전송.

    INSERT INTO dbo.table_name_new
    (
    field1, field2, etc...
    )
    SELECT 
    field1, field2, etc...
    FROM 
    dbo.table_name_old;
    

    5) 데이터를 확인하다.

    SELECT * FROM dbo.table_name_new
    

    6) 신원을 다시 활성화합니다.

    SET IDENTITY_INSERT ToyRecP.ToyAwards.lkpFile_New OFF
    

    7) 이것은 내가) 어떤 테이블 (들 확인하기 위해 의존성과 같은 원래의 테이블 참조를 모든 FK 관계를 얻을 수있는 가장 좋은 스크립트입니다 나는 많은 걸쳐, 그래서이 골키퍼입니다 왔어요!

    SELECT f.name AS ForeignKey,
       OBJECT_NAME(f.parent_object_id) AS TableName,
       COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
       OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
       COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
    FROM sys.foreign_keys AS f
    INNER JOIN sys.foreign_key_columns AS fc
       ON f.OBJECT_ID = fc.constraint_object_id
       ORDER BY ReferenceTableName;
    

    8)이 다음 단계 이전에, 관련된 모든 테이블에 대한 모든 PK와 FK 스크립트를 가지고 있는지 확인하십시오.

    9) 당신은 2008 SQL 서버를 사용하여이 각 키와 스크립트를 마우스 오른쪽 단추로 클릭

    10)이 구문을 사용하여 의존성 테이블 (들)로부터 FK (들)을 삭제 :

    ALTER TABLE [dbo].[table_name] DROP CONSTRAINT [Name_of_FK]
    

    11) 원래의 테이블을 삭제 :

    DROP TABLE dbo.table_name_old;
    

    13)이 다음 단계는 9 단계에서 SQL 서버 2008에서 만든 스크립트에 의존하고 있습니다.

    새 테이블에 PK를 --add.

    새 테이블에 FK를 --add.

    종속성 테이블에 FK의 뒤를 --add.

    14) 확인 모든 것이 정확하고 완전한입니다. 나는 테이블을보고 GUI를 사용했다.

    15.) 원래 테이블의 이름으로 새 테이블의 이름을 바꿉니다.

    exec sp_RENAME '[Schema_Name.OldTableName]' , '[NewTableName]';
    

    마지막으로, 모든 일!

  8. ==============================

    8.나는 보통의 경우에서 알 수있는 바와 같이 우리는 ID 속성을 데 기본 키가있는 테이블을 만들 이름 바꾸기 그래서 또는 제약 규칙 열 구조의 유효성을 검사하기 때문에 할 수 없습니다 기본 키 제약 조건과 관련된 열을 삭제합니다. 이를 TTO 우리는 다음과 같은 방법으로 몇 가지 단계를 처리해야합니다 : 우리가 TABLENAME을 가정 해 봅시다 = '직원'과의 ColumnName = '직원 ID' '직원'테이블에 새 열 'EmployeeId_new'를 추가하십시오 ALTER TABLE 직원 ADD EmployeeId_new INT의 IDENTITY (1,1)

    나는 보통의 경우에서 알 수있는 바와 같이 우리는 ID 속성을 데 기본 키가있는 테이블을 만들 이름 바꾸기 그래서 또는 제약 규칙 열 구조의 유효성을 검사하기 때문에 할 수 없습니다 기본 키 제약 조건과 관련된 열을 삭제합니다. 이를 TTO 우리는 다음과 같은 방법으로 몇 가지 단계를 처리해야합니다 : 우리가 TABLENAME을 가정 해 봅시다 = '직원'과의 ColumnName = '직원 ID' '직원'테이블에 새 열 'EmployeeId_new'를 추가하십시오 ALTER TABLE 직원 ADD EmployeeId_new INT의 IDENTITY (1,1)

    이제 테이블 '직원 ID'와 '직원은'정체성에 대한 수정 8. 기존의 기본 키 제약 조건과 함께 규칙

  9. ==============================

    9.디자인으로 켜거나 기존 컬럼에 대한 신원 기능을 해제하는 간단한 방법이 없습니다. 이 작업을 수행 할 수있는 깨끗한 방법은 새 열을 만들고 그것을 ID 열을 만들거나 새 테이블을 생성하고 데이터를 마이그레이션하는 것입니다.

    디자인으로 켜거나 기존 컬럼에 대한 신원 기능을 해제하는 간단한 방법이 없습니다. 이 작업을 수행 할 수있는 깨끗한 방법은 새 열을 만들고 그것을 ID 열을 만들거나 새 테이블을 생성하고 데이터를 마이그레이션하는 것입니다.

    우리는 SQL Server Management Studio의 새로운 임시 테이블이 만들어 열 "ID"에 ID 값, 제거하기 위해 사용하는 경우, 데이터를 임시 테이블로 이동, 기존의 테이블을 삭제하고 새 테이블 이름이 바뀝니다.

    사용 관리 Studio는 변경 후 바로 디자이너 클릭하고 "변경 스크립트를 생성"을 선택합니다.

    이 백그라운드에서 수행에서 무엇을 SQL 서버입니다 것을 볼 수 있습니다.

  10. ==============================

    10.당신은 이전 테이블이 이전에 새 테이블의 이름을 변경 한 다음 당신은 다른 열을 추가 원래의 열을 삭제하고 새 열 이름을 바꾸거나 또는 새 테이블을 만들 필요가있는 데이터를 복사, 그런 식을하고 삭제할 수 없습니다 표

    당신은 이전 테이블이 이전에 새 테이블의 이름을 변경 한 다음 당신은 다른 열을 추가 원래의 열을 삭제하고 새 열 이름을 바꾸거나 또는 새 테이블을 만들 필요가있는 데이터를 복사, 그런 식을하고 삭제할 수 없습니다 표

    당신이 디자이너에서 SSMS를 사용하여 ON에 ID 속성을 설정하는 경우 여기에 SQL Server가 무대 뒤에서하는 일이다. 라는 이름의 테이블이있는 경우 당신이 만드는 경우에 따라서 [사용자]이 발생하는 사용자 ID와 정체성이다

    BEGIN TRANSACTION
    SET QUOTED_IDENTIFIER ON
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    SET ARITHABORT ON
    SET NUMERIC_ROUNDABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    
    GO
    
    GO
    CREATE TABLE dbo.Tmp_User
        (
        UserID int NOT NULL IDENTITY (1, 1),
        LastName varchar(50) NOT NULL,
        FirstName varchar(50) NOT NULL,
        MiddleInitial char(1) NULL
    
        )  ON [PRIMARY]
    GO
    
    SET IDENTITY_INSERT dbo.Tmp_User ON
    GO
    IF EXISTS(SELECT * FROM dbo.[User])
     EXEC('INSERT INTO dbo.Tmp_User (UserID, LastName, FirstName, MiddleInitial)
        SELECT UserID, LastName, FirstName, MiddleInitialFROM dbo.[User] TABLOCKX')
    GO
    SET IDENTITY_INSERT dbo.Tmp_User OFF
    GO
    
    GO
    DROP TABLE dbo.[User]
    GO
    EXECUTE sp_rename N'dbo.Tmp_User', N'User', 'OBJECT'
    GO
    ALTER TABLE dbo.[User] ADD CONSTRAINT
        PK_User PRIMARY KEY CLUSTERED 
        (
        UserID
        ) ON [PRIMARY]
    
    GO
    COMMIT
    

    거기에 비트 값을 설정하여이를 달성하기 위해 시스템 테이블을 해킹하는 방법입니다하지만이 지원되지 않습니다 내가 그것을 할 것이라고 말했다 가졌어요

  11. ==============================

    11.슬프게도, 하나가 아니다; IDENTITY 속성은 테이블이 아닌 컬럼에 속한다.

    슬프게도, 하나가 아니다; IDENTITY 속성은 테이블이 아닌 컬럼에 속한다.

    더 쉬운 방법은 GUI에 그것을 할 것입니다, 그러나 이것은 옵션이 아닌 경우, 당신은 데이터를 복사 열을 떨어 뜨리고의 주위에 먼 길을 갈 수 있습니다, 정체성을 다시 추가, 데이터 등을 넣어.

    타격별로 타격 계정 여기를 참조하십시오.

  12. ==============================

    12.개체 탐색기에서 테이블 이름에 마우스 오른쪽 버튼을 클릭합니다. 당신은 몇 가지 옵션을 얻을 것이다. '디자인'을 클릭합니다. 새 탭이이 테이블에 대해 열립니다. 당신은 '열 속성'여기 신원 제약 조건을 추가 할 수 있습니다.

    개체 탐색기에서 테이블 이름에 마우스 오른쪽 버튼을 클릭합니다. 당신은 몇 가지 옵션을 얻을 것이다. '디자인'을 클릭합니다. 새 탭이이 테이블에 대해 열립니다. 당신은 '열 속성'여기 신원 제약 조건을 추가 할 수 있습니다.

  13. ==============================

    13.열에 대한 신원 속성을 수정하려면 :

    열에 대한 신원 속성을 수정하려면 :

    그게, 그리고 그것은 나를 위해 일한

  14. ==============================

    14.당신은 비주얼 스튜디오를 사용하는 일이면 2017+

    당신은 비주얼 스튜디오를 사용하는 일이면 2017+

    이것은 모든 당신을 위해 그것을 할 것입니다.

  15. ==============================

    15.원래 포스터가 실제로 IDENTITY 열 (다른 두 가지) 다음이와 t-SQL을 통해 수행 될 수로 열을 필요로하지 않았다 실제로 테이블의 PRIMARY KEY로 기존 열을 설정하고 싶은 경우 :

    원래 포스터가 실제로 IDENTITY 열 (다른 두 가지) 다음이와 t-SQL을 통해 수행 될 수로 열을 필요로하지 않았다 실제로 테이블의 PRIMARY KEY로 기존 열을 설정하고 싶은 경우 :

    ALTER TABLE [YourTableName]
    ADD CONSTRAINT [ColumnToSetAsPrimaryKey] PRIMARY KEY ([ColumnToSetAsPrimaryKey])
    

    기본 키 옵션 후 열 이름 주위에 괄호를합니다.

    이 게시물은 오래되어 요청자 필요에 대해 내가 가정을하고 있지만, 내가 하나를 이끌 수있는 대화가 기존의 열이을로 설정 될 수 있다고 생각하는 생각으로이 추가 정보는이 스레드가 발생한 사용자에게 도움이 될 수있는 느낌 잘못된 것이 먼저 새 열로 추가없이 기본 키.

  16. ==============================

    16.나의 현재의 상태에 따라, 나는이 방법을 따르십시오. 나는 스크립트를 통해 삽입 된 데이터 후 기본 테이블에 정체성을 부여하고 싶습니다.

    나의 현재의 상태에 따라, 나는이 방법을 따르십시오. 나는 스크립트를 통해 삽입 된 데이터 후 기본 테이블에 정체성을 부여하고 싶습니다.

    나는 항상 1부터 시작하므로, 신원을 추가 원하는대로 내가 원하는 것을 기록 카운트 종료합니다.

    --first drop column and add with identity
    ALTER TABLE dbo.tblProductPriceList drop column ID 
    ALTER TABLE dbo.tblProductPriceList add ID INT IDENTITY(1,1)
    
    --then add primary key to that column (exist option you can ignore)
    IF  NOT EXISTS (SELECT * FROM sys.key_constraints  WHERE object_id = OBJECT_ID(N'[dbo].[PK_tblProductPriceList]') AND parent_object_id = OBJECT_ID(N'[dbo].[tblProductPriceList]'))
        ALTER TABLE [tblProductPriceList] ADD PRIMARY KEY (id)
    GO
    

    이것은 정체성과 같은 기본 키 열을 만듭니다

    나는이 링크를 사용 : https://blog.sqlauthority.com/2014/10/11/sql-server-add-auto-incremental-identity-column-to-table-after-creating-table/

    기존 테이블에 기본 키를 추가

  17. ==============================

    17.난 당신이 TSQL을 사용하여 ID 열로 기존 열을 변경할 수 있다고 생각하지 않습니다. 그러나 엔터프라이즈 관리자 디자인보기를 통해 그것을 할 수 있습니다.

    난 당신이 TSQL을 사용하여 ID 열로 기존 열을 변경할 수 있다고 생각하지 않습니다. 그러나 엔터프라이즈 관리자 디자인보기를 통해 그것을 할 수 있습니다.

    또는 당신은 당신의 새로운 열 이름을 변경, 이전 열을 삭제, ID 열로 새 행을 만들 수 있습니다.

    ALTER TABLE FooTable
    ADD BarColumn INT IDENTITY(1, 1)
                   NOT NULL
                   PRIMARY KEY CLUSTERED
    
  18. ==============================

    18.기본적으로 4 개의 논리 단계가 있습니다.

    기본적으로 4 개의 논리 단계가 있습니다.

    등 여러 서버에 작업 같은 좀 더 복잡한이있을 수 있습니다

    (SSMS & T-SQL을 사용하여) 단계의 다음 문서를 참조하십시오. 이 단계는 T-SQL에 덜 그립 초보자를위한 것입니다.

    http://social.technet.microsoft.com/wiki/contents/articles/23816.how-to-convert-int-column-to-identity-in-the-ms-sql-server.aspx

  19. ==============================

    19.신원 세트가없는 기본 키 = BIGINT 모든 테이블에 대한 스크립트를 생성; 이 각 테이블에 생성 된 스크립트의 목록을 반환합니다;

    신원 세트가없는 기본 키 = BIGINT 모든 테이블에 대한 스크립트를 생성; 이 각 테이블에 생성 된 스크립트의 목록을 반환합니다;

    SET NOCOUNT ON;
    
    declare @sql table(s varchar(max), id int identity)
    
    DECLARE @table_name nvarchar(max),
            @table_schema nvarchar(max);
    
    DECLARE vendor_cursor CURSOR FOR 
    SELECT
      t.name, s.name
    FROM sys.schemas AS s
    INNER JOIN sys.tables AS t
      ON s.[schema_id] = t.[schema_id]
    WHERE EXISTS (
        SELECT
        [c].[name]
        from sys.columns [c]
        join sys.types [y] on [y].system_type_id = [c].system_type_id
        where [c].[object_id] = [t].[object_id] and [y].name = 'bigint' and [c].[column_id] = 1
    ) and NOT EXISTS 
    (
      SELECT 1 FROM sys.identity_columns
        WHERE [object_id] = t.[object_id]
    ) and exists (
        select 1 from sys.indexes as [i] 
        inner join sys.index_columns as [ic]  ON  i.OBJECT_ID = ic.OBJECT_ID AND i.index_id = ic.index_id
        where object_name([ic].[object_id]) = [t].[name]
    )
    OPEN vendor_cursor
    
    FETCH NEXT FROM vendor_cursor 
    INTO @table_name, @table_schema
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
    
    DELETE FROM @sql
    
    declare @pkname varchar(100),
        @pkcol nvarchar(100)
    
    SELECT  top 1
            @pkname = i.name,
            @pkcol = COL_NAME(ic.OBJECT_ID,ic.column_id)
    FROM    sys.indexes AS [i]
    INNER JOIN sys.index_columns AS [ic] ON  i.OBJECT_ID = ic.OBJECT_ID AND i.index_id = ic.index_id
    WHERE   i.is_primary_key = 1 and OBJECT_NAME(ic.OBJECT_ID) = @table_name
    
    declare @q nvarchar(max) = 'SELECT  '+@pkcol+' FROM ['+@table_schema+'].['+@table_name+'] ORDER BY '+@pkcol+' DESC'
    
    DECLARE @ident_seed nvarchar(max) -- Change this to the datatype that you are after
    SET @q = REPLACE(@q, 'SELECT', 'SELECT TOP 1 @output = ')
    EXEC sp_executeSql @q, N'@output bigint OUTPUT', @ident_seed OUTPUT
    
    insert into  @sql(s) values ('BEGIN TRANSACTION')
    insert into  @sql(s) values ('BEGIN TRY')
    
    -- create statement
    insert into  @sql(s) values ('create table ['+@table_schema+'].[' + @table_name + '_Temp] (')
    
    -- column list
    insert into @sql(s) 
    select 
        '  ['+[c].[name]+'] ' +
        y.name + 
    
        (case when [y].[name] like '%varchar' then
        coalesce('('+(case when ([c].[max_length] < 0 or [c].[max_length] >= 1024) then 'max' else cast([c].max_length as varchar) end)+')','')
        else '' end)
    
         + ' ' +
        case when [c].name = @pkcol then 'IDENTITY(' +COALESCE(@ident_seed, '1')+',1)' else '' end + ' ' +
        ( case when c.is_nullable = 0 then 'NOT ' else '' end ) + 'NULL ' + 
        coalesce('DEFAULT ('+(
            REPLACE(
                REPLACE(
                    LTrim(
                        RTrim(
                            REPLACE(
                                REPLACE(
                                    REPLACE(
                                        REPLACE(
                                            LTrim(
                                                RTrim(
                                                    REPLACE(
                                                        REPLACE(
                                                            object_definition([c].default_object_id)
                                                        ,' ','~')
                                                    ,')',' ')
                                                )
                                            )
                                        ,' ','*')
                                    ,'~',' ')
                                ,' ','~')
                            ,'(',' ')
                        )
                    )
                ,' ','*')
            ,'~',' ')
        ) +
        case when object_definition([c].default_object_id) like '%get%date%' then '()' else '' end
        +
        ')','') + ','
     from sys.columns c
     JOIN sys.types y ON y.system_type_id = c.system_type_id
      where OBJECT_NAME(c.[object_id]) = @table_name and [y].name != 'sysname'
     order by [c].column_id
    
    
     update @sql set s=left(s,len(s)-1) where id=@@identity
    
    -- closing bracket
    insert into @sql(s) values( ')' )
    
    insert into @sql(s) values( 'SET IDENTITY_INSERT ['+@table_schema+'].['+@table_name+'_Temp] ON')
    
    declare @cols nvarchar(max)
    SELECT @cols = STUFF(
        (
            select ',['+c.name+']'
            from sys.columns c
            JOIN sys.types y ON y.system_type_id = c.system_type_id
            where c.[object_id] = OBJECT_ID(@table_name)
            and [y].name != 'sysname'
            and [y].name != 'timestamp'
            order by [c].column_id
            FOR XML PATH ('')
         )
        , 1, 1, '')
    
    insert into @sql(s) values( 'IF EXISTS(SELECT * FROM ['+@table_schema+'].['+@table_name+'])')
    insert into @sql(s) values( 'EXEC(''INSERT INTO ['+@table_schema+'].['+@table_name+'_Temp] ('+@cols+')')
    insert into @sql(s) values( 'SELECT '+@cols+' FROM ['+@table_schema+'].['+@table_name+']'')')
    
    insert into @sql(s) values( 'SET IDENTITY_INSERT ['+@table_schema+'].['+@table_name+'_Temp] OFF')
    
    
    insert into @sql(s) values( 'DROP TABLE ['+@table_schema+'].['+@table_name+']')
    
    insert into @sql(s) values( 'EXECUTE sp_rename N''['+@table_schema+'].['+@table_name+'_Temp]'', N'''+@table_name+''', ''OBJECT''')
    
    if ( @pkname is not null ) begin
        insert into @sql(s) values('ALTER TABLE ['+@table_schema+'].['+@table_name+'] ADD CONSTRAINT ['+@pkname+'] PRIMARY KEY CLUSTERED (')
        insert into @sql(s)
            select '  ['+COLUMN_NAME+'] ASC,' from information_schema.key_column_usage
            where constraint_name = @pkname
            GROUP BY COLUMN_NAME, ordinal_position
            order by ordinal_position
    
        -- remove trailing comma
        update @sql set s=left(s,len(s)-1) where id=@@identity
        insert into @sql(s) values ('  )')
    end
    
    insert into  @sql(s) values ('--Run your Statements')
    insert into  @sql(s) values ('COMMIT TRANSACTION')
    insert into  @sql(s) values ('END TRY')
    insert into  @sql(s) values ('BEGIN CATCH')
    insert into  @sql(s) values ('        ROLLBACK TRANSACTION')
    insert into  @sql(s) values ('        DECLARE @Msg NVARCHAR(MAX)  ')
    insert into  @sql(s) values ('        SELECT @Msg=ERROR_MESSAGE() ')
    insert into  @sql(s) values ('        RAISERROR(''Error Occured: %s'', 20, 101,@msg) WITH LOG')
    insert into  @sql(s) values ('END CATCH')
    
    declare @fqry nvarchar(max)
    
    -- result!
    SELECT @fqry = (select char(10) + s from @sql order by id FOR XML PATH (''))
    
    
    SELECT @table_name as [Table_Name], @fqry as [Generated_Query]
    PRINT 'Table: '+@table_name
    EXEC sp_executeSql @fqry
    
        FETCH NEXT FROM vendor_cursor 
        INTO @table_name, @table_schema
    END 
    CLOSE vendor_cursor;
    DEALLOCATE vendor_cursor;
    
  20. from https://stackoverflow.com/questions/1049210/adding-an-identity-to-an-existing-column by cc-by-sa and MIT license