[英]Alter SQL Server table column width with indexes
我正在使用SQL Server 2008,并且需要将许多表中的大量列从decimal(9,3)
更改为decimal(12,6)
我目前遇到的问题是,某些表在这些列上有多个索引,并且由于该索引而使alter语句失败。
有没有一种方法可以更改列而不丢失索引?
我将列更改如下:
alter table [TABLE_NAME] alter column [Conf_Tonnes] decimal(12,6) not null
我认为,尽管对列有任何限制,但无法更改其类型。 当然,以前的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)
这将为您提供需要更改的字段列表。 您也可以从字段中删除约束,但是困难的是如何重新创建它们。 如果您具有数据库的外部元描述,则可以使用它来轻松生成脚本。 或者,您可以运行脚本生成工具-选中所有表,关闭所有选项,但表和索引除外-这将为您生成表和索引的完整列表。 您可以通过右键单击对象资源管理器/任务/生成脚本中的数据库来找到它。
不幸的是,我认为如果不创建表创建脚本就无法生成索引脚本-但是Visual Studio文本编辑脚本可以简化您不需要的部分的工作。
如果有时间,可能可以将一些脚本放在一起以自动完成整个工作,并且它将为您提供一套不错的工具供将来使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.