我最近在一个表中添加了一个可为NULL的位列,该表具有近5亿行。列上没有默认值,但是所有插入都将值指定为0或1,并且我运行了一次例程,将0或1分配给所有现有行(小批量更新行)。现在,每一行在该列中应具有0或1。
我想使bit列不可为空,但是当我尝试通过via进行操作时ALTER TABLE t1 ALTER COLUMN c1 bit not null
,它开始运行了3分钟,并且我停止了它,因为它阻止了对表的所有读取,并且我怀疑它将花费很长时间才能完成。可能不会花费太长时间,但是我不能冒太多不可用的风险。回滚本身花费了6分钟。
您对我如何使该列不可为空而不可能花费数小时才能完成有什么建议? 另外,有什么方法可以估算ALTER TABLE ALTER COLUMN
我开始然后取消的语句需要多长时间?
我正在使用SQL Server 2017 Web Edition。
SELECT c1, count(*) FROM t1 GROUP BY c1
了大约9分钟才能运行。之后的实际ALTER TABLE ALTER COLUMN
陈述需要25分钟才能完成。还不错