我有一个包含超过 1.5 亿条记录的表。目前的类型是:
id (Primary Key, Bigint)
idResult (Foreign key, Bigint null)
idItem (Foreign Key, Bigint null)
Number_1 (Bigint null)
Number_2 (Bigint null)
IsActive (Bigint null)
Run Code Online (Sandbox Code Playgroud)
Number_1 和 Number_2 永远不能大于 10。IsActive 显然是一个布尔值。并且这些列在代码库中的任何其他地方都不可以为空。我还想将外键字段更改为 int,但那又是另外一回事了。这张桌子是在我开始之前几年建造的,我们正在经历一些成长的痛苦。
我正在寻找转换这些列(以及其他表上的其他几个列,尽管这是主要的违规者)并回收该磁盘空间的最佳方法。我已经尝试了一个直接的Alter Table,但是,有点出乎意料,只是没有奏效。我不记得具体的错误,但我相信它与相关表格的大小有关。
现在我正在考虑手动删除并重新创建表,但我正在努力找出更好的方法来做到这一点,而不是使用 a Select TOP 10000 * FROM dbo.TABLENAME WHERE id > 0,并且简单地多次增加 where 子句。
我看过了Switch To,但这要求目标表的数据类型与源表匹配,这就是我要修复的问题!
有什么建议?我是不是看错了?