我正在使用SQL Server 2008,需要在decimal(9,3)
到decimal(12,6)
我目前遇到的问题是某些表在这些列上有多个索引,并且由于索引而导致alter语句失败。
有没有办法在不丢失索引的情况下更改列?
我正在改变列,如下所示:
alter table [TABLE_NAME] alter column [Conf_Tonnes] decimal(12,6) not null
答案 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文本编辑脚本可以帮助你减少你不想要的数据。
考虑到时间,可能会将一些脚本放在一起自动完成整个工作,它会为您提供一套适合将来使用的工具。