SQL Server 删除 和 创建 主键,外键,索引
2019-09-18 17:00 醒醒- 阅读(1089) 评论(1) 收藏 举报问题:将表A的Id,CId,DId字段类型由int修改为bigint,但是表A的Id字段存在主键,外键,索引,CId,DId字段上存在check约束。
必须先删除相关约束,才能对字段进行修改
1.删除主键
IF EXISTS (SELECT * FROM sysobjects WHERE name = '主键名称') --判断主键约束是否存在
ALTER TABLE 表A DROP CONSTRAINT 主键名称
GO
2.删除外键
假设:表A与表B存在外键约束:表A的主键被表B的外键引用即:
ALTER TABLE 表B ADD CONSTRAINT 外键名称 FOREIGN KEY(表B字段) REFERENCES 表A(Id)
注:此处是表B引用表A字段,需先在表B处删除外键,才能修改表A
IF EXISTS (SELECT * FROM sysobjects WHERE name = '外键名称') --判断外键约束是否存在
ALTER TABLE 表B DROP CONSTRAINT 外键名称
GO
3.删除索引
IF EXISTS(SELECT 1 FROM sysindexes WHERE id=object_id('PasTransactions') AND name='索引名称') --判断索引是否存在
DROP INDEX 索引名称 ON 表A
GO
4.删除Check约束
IF EXISTS (SELECT * FROM sysobjects WHERE name = '约束名称') --判断check约束是否存在
ALTER TABLE 表A DROP CONSTRAINT 约束名称
GO
5.修改字段类型:int --> bigint
IF COL_LENGTH('表A', 'Id') IS NOT NULL --判断表A上Id字段是否存在
ALTER TABLE 表A ALTER COLUMN Id BIGINT NOT NULL
GO
IF COL_LENGTH('表A', 'CId') IS NOT NULL --判断表A上CId字段是否存在
ALTER TABLE 表A ALTER COLUMN CId BIGINT
GO
IF COL_LENGTH('表A', 'DId') IS NOT NULL --判断表A上DId字段是否存在
ALTER TABLE 表A ALTER COLUMN DId BIGINT
GO
6.增加主键
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = '主键名称') --判断主键是否存在
ALTER TABLE 表A ADD CONSTRAINT 主键名称 PRIMARY KEY (Id)
GO
7.增加外键
注:此处表B引用表A字段,所以增加外键仍在表B上。
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = '外键名称') --判断外键是否存在
ALTER TABLE 表B ADD CONSTRAINT 外键名称 FOREIGN KEY(表B字段) REFERENCES 表A(Id)
GO
8.增加索引
IF NOT EXISTS(SELECT 1 FROM sysindexes WHERE id=object_id('PasTransactions') AND name='索引名称') --判断索引是否存在
CREATE NONCLUSTERED INDEX 索引名称 ON 表A (Id)
--此处非聚集索引,聚集索引将NONCLUSTERED改为CLUSTERED
GO
9.增加Check约束
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = '约束名称') --判断Check约束是否存在
ALTER TABLE 表A ADD CONSTRAINT 约束名称 CHECK([CId] IS NULL OR [DId] IS NULL)
GO
浙公网安备 33010602011771号