在禁用外键约束和索引之前更改列的数据类型

时间:2012-04-27 16:35:30

标签: sql-server sql-server-2008 constraints indexing

我想更改列的数据类型。

因为该列被引用为具有2个其他表的外键,所以我需要在其他2个表上删除外键约束。

此外,当前表还有需要删除的索引。

如何做到这一点?

1 个答案:

答案 0 :(得分:0)

您需要知道索引和外键名称,这些名称可以从sys表中提取。删除它们的语法是:

外键

IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[foreign_key_index_name]') AND parent_object_id = OBJECT_ID(N'[dbo].[tablename]'))
ALTER TABLE [dbo].[tablename] DROP CONSTRAINT [foreign_key_index_name]

<强>索引

IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[tablename]') AND name = N'index_name')
DROP INDEX [index_name] ON [dbo].[tablename] WITH ( ONLINE = OFF )

此信息也可在BOL中找到。

您可以使用以下查询找到索引和外键名称:

select * from sys.indexes where object_id = object_id(N'[dbo].[tablename]')
select * from sys.foreign_keys where parent_object_id = object_id(N'[dbo].[tablename]')