使用索引更改SQL Server表列宽

时间:2010-07-08 09:06:16

标签: sql sql-server

我正在使用SQL Server 2008,需要在decimal(9,3)decimal(12,6)

的多个表中更改大量列

我目前遇到的问题是某些表在这些列上有多个索引,并且由于索引而导致alter语句失败。

有没有办法在不丢失索引的情况下更改列?

我正在改变列,如下所示:

alter table [TABLE_NAME] alter column [Conf_Tonnes] decimal(12,6) not  null

1 个答案:

答案 0 :(得分:0)

我认为不可能改变列的类型,因为它对它有任何约束。当然,早期版本的SQL Server就是这种情况,我认为它没有改变。

出于实际目的,您可以使用脚本列出特定类型的所有字段:

DECLARE @name AS varchar(20)

SET @name = '<Name of type>'

select T.name as "Table", F.name as "Field" 
from sys.tables T left join sys.columns F on T.object_id=F.object_id
where F.user_type_id=(select user_type_id from sys.types where name=@name)

这将为您提供需要更改的字段列表。 您也可以从字段中删除约束,但困难的是如何重新创建它们。 如果您有数据库的外部元描述,那么您可以使用它来轻松生成脚本。或者,您可以运行脚本生成工具 - 选择所有表,关闭所有选项,除了表和索引 - 这应该为您生成表和索引的完整列表。 您可以通过右键单击object explorer / tasks / generate scripts中的数据库来找到它。

不幸的是,我不认为你可以在没有创建表创建脚本的情况下生成索引脚本 - 但是Visual Studio文本编辑脚本可以帮助你减少你不想要的数据。

考虑到时间,可能会将一些脚本放在一起自动完成整个工作,它会为您提供一套适合将来使用的工具。