我是RDBMS的学生.
我有非常基本的问题让我们说sql Server中有一个现有的表.什么将是脚本来改变表.
>删除列’RowId'(如果存在).
>如果存在则丢弃约束.
>在表中添加一个新列“RowId”.
>将此列作为主键.
> Autoincrement type 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.YourTable或PK_YourTable的任何地方,你必须用你自己的数据库替换这些占位符与实际的表/约束名称(你没有提到他们是什么,在你的问题….. )