繁体   English   中英

使用索引更改SQL Server表列的宽度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM