代码之家  ›  专栏  ›  技术社区  ›  George2

SQL Server将列转换为标识列

  •  3
  • George2  · 技术社区  · 16 年前

    提前谢谢,

    2 回复  |  直到 13 年前
        1
  •  8
  •   Quassnoi    16 年前

    很遗憾,不能将字段更改为 IDENTITY 在现有表上。

    你应该:

    • 身份
    • SET IDENTITY_INSERT ON
    • 将数据插入新表
    • 发行 SET IDENTITY_INSERT OFF
    • 放下那张旧桌子
    • 将新表重命名为旧名称。

    你可以用 SSMS

    CREATE TABLE plain (id INT NOT NULL PRIMARY KEY)
    
    INSERT
    INTO    plain
    VALUES  (1000)
    

    以及由 SSMS系统 :

    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    GO
    CREATE TABLE dbo.Tmp_plain
        (
        id int NOT NULL IDENTITY (1, 1)
        )  ON [PRIMARY]
    GO
    ALTER TABLE dbo.Tmp_plain SET (LOCK_ESCALATION = TABLE)
    GO
    SET IDENTITY_INSERT dbo.Tmp_plain ON
    GO
    IF EXISTS(SELECT * FROM dbo.plain)
         EXEC('INSERT INTO dbo.Tmp_plain (id)
            SELECT id FROM dbo.plain WITH (HOLDLOCK TABLOCKX)')
    GO
    SET IDENTITY_INSERT dbo.Tmp_plain OFF
    GO
    DROP TABLE dbo.plain
    GO
    EXECUTE sp_rename N'dbo.Tmp_plain', N'plain', 'OBJECT' 
    GO
    ALTER TABLE dbo.plain ADD CONSTRAINT
        PK__plain__3213E83F1A609306 PRIMARY KEY CLUSTERED 
        (
        id
        ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    
    GO
    COMMIT
    
        2
  •  3
  •   apprich    16 年前

    在sql server的“对象资源管理器”中转到表对象右键单击一个表,说“修改”,然后单击要转换为标识的主键字段,然后在下面您将看到列属性,在那里您需要更改为(is identity)Yes和Idendity Increment 1。