【发布时间】:2018-11-16 16:55:41
【问题描述】:
我有一个巨大的旧旧 SQL Server 数据库。我正在尝试将每个 datetime 更改为 datetime2,但简单的方法(使用游标的循环 TSQL 脚本)遇到了许多这样的障碍:
消息 5074,第 16 级,状态 1,第 1 行
索引“IX_Table_ColId_ModifiedOn”依赖于列“ModifiedOn”消息 4922,第 16 级,状态 9,第 1 行
ALTER TABLE ALTER COLUMN ModifiedOn 失败,因为一个或多个对象访问此列。
除了索引之外,还有计算列、默认约束和其他使用这些列的东西,从而阻塞了 ALTER。
避免停机对我们来说不是问题。是否有一个神奇的 TSQL 脚本或技术可以找到连接到列/表的东西,暂时删除它们,允许 ALTER,然后重新创建它们?
相关问题:
【问题讨论】:
-
如果这不是问题,那么您可以删除所有约束和索引,进行更改并读取它们。这不是一个选项吗?
-
链接的帖子完全正确,但不完全是您需要做的。继续它,因为没有魔法命令可以做到这一点。并包含视图,因为模式绑定也会阻止此类更改。
-
@scsimon 大约有 1000 个表和数十种随机方式使用 datetime 列。手动计算需要很长时间。
-
@SMor:链接的问题类似,但没有好的、完整的答案。我很确定理论上可以构建这个脚本,它只需要很长时间并且有很多边缘情况。它一定是有人在某个地方建造的,我正在努力寻找它,这样我就不必自己动手了。
-
您不必手动执行此操作。在通过 gui 编写脚本后,我会通过光标删除数据库中的所有约束
标签: sql sql-server tsql sql-server-2016