sql-server - 我可以在 SQL Server 中在线删除非空约束吗?
问题描述
我有一个包含很多行的表(超过 300 000 000)。我想通过在数据库仍处于负载状态时运行下一个 SQL 查询来删除其中一列的非空约束(由于表很大,可能需要大约 10 分钟):
ALTER TABLE DECLARATION
ALTER COLUMN LOCAL_REFERENCE_NUMBER VARCHAR(22) NULL WITH (ONLINE = ON);
我希望这个ONLINE = ON
选项能够确保在更新期间表没有被锁定,以确保使用数据库的应用程序在更新期间仍然可以执行此操作。
但是,文档说这ONLINE = ON
仅适用于添加和删除索引以及主键或唯一约束,即,从官方文档看来,此选项对非空约束无效。
确实是这样,还是文档不完整?如果是这种情况,那么删除 not null 约束以致不能在线完成有什么特别之处?
谢谢你。
解决方案
如评论部分所述,此操作应仅为元数据操作(如果未发生数据类型更改):
ALTER TABLE DECLARATION
ALTER COLUMN LOCAL_REFERENCE_NUMBER VARCHAR(22) NULL;
可以通过设置扩展事件会话和观察 sqlserver.compressed_alter_column_is_md_only
事件来验证(SQL Server 2016+)
推荐阅读
- vuejs2 - 将样板 StencilJS 组件库导入样板 Vue SPA
- c# - C# 发布请求-Request.Form.Files[0] 错误
- arrays - 更新 mongodb 中对象数组的一个元素
- java - 任务 ':device_info:compileDebugJavaWithJavac' 执行失败
- data-structures - 哈希表真的是 O(1) 吗?
- r - 处理需要订单和累计天数的data.frame
- mongoose - 在猫鼬中排序抛出无效的排序值
- jmeter - EPP 应用程序的性能测试脚本
- settings - Xcode 13 - 关闭自动导入功能
- pandas - 使用 pandas 数据框进行旋转和转置