SOF*_*ser 19 sql-server sql-server-2005
我是RDBMS的学生.
我有一个非常基本的问题,就是说我在SQL服务器上有一个现有的表.什么是改变表的脚本.
mar*_*c_s 47
在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
Run Code Online (Sandbox Code Playgroud)
当然,如果其他表dbo.YourTable使用外键约束将其引用到预先存在的RowId列上,则此脚本可能仍会失败...
更新:和当然,无论我用dbo.YourTable或者PK_YourTable,您必须更换与那些占位符实际从自己的数据库表/约束名(你没有提到它们是什么,在你的问题......)
注意:在更新问题之前添加了此答案
示例脚本:
CREATE TABLE whatever (
OldPKColumn uniqueidentifier NOT NULL,
CONSTRAINT PK_whatever PRIMARY KEY (OldPKColumn)
)
ALTER TABLE whatever
ADD RowId int NOT NULL IDENTITY (1,1);
ALTER TABLE whatever
DROP CONSTRAINT PK_whatever;
ALTER TABLE whatever WITH CHECK
ADD CONSTRAINT PK_whatever PRIMARY KEY CLUSTERED (RowId);
ALTER TABLE whatever
DROP COLUMN oldPKcolumn;
Run Code Online (Sandbox Code Playgroud)
随机想一想......你想重置IDENTITY列吗?
如果是,则使用DBCC CHECKIDENT
只是一条评论来改进这些伟大的答案(还不能使用评论 - 我距离该特权只有一个声誉点)并作为我自己未来的参考:
也可以在单个语句中添加新的 IDENTITY(自动编号)列并将其设为主键:
ALTER TABLE [表名] ADD [列名] int IDENTITY PRIMARY KEY;
当约束名称没有帮助时,我不想打扰它。
您可以在关键字后面的括号之间指定种子(和增量)值IDENTITY。
| 归档时间: |
|
| 查看次数: |
85813 次 |
| 最近记录: |