加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

更改列数据类型时保留SQL索引

发布时间:2020-12-12 16:46:40 所属栏目:MsSql教程 来源:网络整理
导读:我有一个smalldatetime列,我需要更改为一个datetime列.这将是安装过程的一部分,因此它不能是手动过程.不幸的是,该列有一些索引和一个非空的约束.索引是性能相关的,只需要使用新的数据类型即可保留.是否可以编写一个语句,允许我保留相关信息,同时仍然更改列数
我有一个smalldatetime列,我需要更改为一个datetime列.这将是安装过程的一部分,因此它不能是手动过程.不幸的是,该列有一些索引和一个非空的约束.索引是性能相关的,只需要使用新的数据类型即可保留.是否可以编写一个语句,允许我保留相关信息,同时仍然更改列数据类型?如果是这样,怎么办?

解决方法

您无法使用索引,唯一约束,外键约束或检查约束将数据类型从smalldatetime更改为datetime.在更改类型之前,您必须将其全部删除.然后:
alter table T alter column TestDate datetime not null

然后重新创建仍然适用的约束和索引.

一些不同的方法来生成下拉并创建:

1)如果您给所有索引和约束提供了明确的名称,那么您的安装程序可以在每个环境(dev,test,用户验收测试,性能测试等)中运行静态脚本.

要生成此显式脚本,您可以:
a)使用SSMS(或与SQL Server 2000,企业管理器)脚本创建和删除语句.
b)从源代码库工作,发现依赖对象的名称和定义,并将相应的静态脚本放在一起.
c)尝试运行alter语句.看看它失败了.查找定义并手写下落并创建. (就个人而言,写下这个滴滴的效果非常好,而不是那么好).

2)如果您没有为所有索引和约束提供明确的名称,那么您的安装程序将必须在数据字典中查询适当的名称,并使用动态SQL在alter column语句之前以正确的顺序运行drop,那么按照正确的顺序创建alter列之后.

如果您知道没有约束,并且只是索引,这将更简单.

可能有工具或图书馆已经知道如何做到这一点.

另外,如果这是打包的应用程序,您可能不会放心本地DBA没有添加索引.

注意:如果有唯一的约束,它将构建一个索引,您将无法使用DROP INDEX删除它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读