我是RDBMS的学生。

我有一个非常基本的问题,可以说我在SQL Server中有一个现有表。什么是更改表的脚本。

  • 删除列“RowId”(如果存在)。
  • 删除约束(如果存在)。
  • 在表中添加一个新列“RowId”。
  • 将此列作为主键。
  • 自动增量类型为int。
  • 最佳答案

    在SQL Server 2005或更高版本中,可以使用以下脚本:

    -- drop PK constraint if it exists
    IF EXISTS (SELECT * FROM sys.key_constraints WHERE type = 'PK' AND parent_object_id = OBJECT_ID('dbo.YourTable') AND Name = 'PK_YourTable')
       ALTER TABLE dbo.YourTable
       DROP CONSTRAINT PK_YourTable
    GO
    
    -- drop column if it already exists
    IF EXISTS (SELECT * FROM sys.columns WHERE Name = 'RowId' AND object_id = OBJECT_ID('dbo.YourTable'))
        ALTER TABLE dbo.YourTable DROP COLUMN RowId
    GO
    
    -- add new "RowId" column, make it IDENTITY (= auto-incrementing)
    ALTER TABLE dbo.YourTable
    ADD RowId INT IDENTITY(1,1)
    GO
    
    -- add new primary key constraint on new column
    ALTER TABLE dbo.YourTable
    ADD CONSTRAINT PK_YourTable
    PRIMARY KEY CLUSTERED (RowId)
    GO
    

    当然,如果其他表使用外键约束将dbo.YourTable引用到预先存在的RowId列上,则此脚本可能仍然会失败...

    更新:当然是,在我使用dbo.YourTablePK_YourTable的任何地方,您都必须用自己数据库中的实际表/约束名称替换那些占位符(在问题中您没有提及它们的名称)。 ....)

    10-06 10:57