使用 Microsoft 登录
登录或创建帐户。
你好,
使用其他帐户。
你有多个帐户
选择要登录的帐户。

症状

假设你将列添加到 Microsoft SQL Server 2012 或 SQL Server 2014 中的表中。 如果行的大小接近于8060字节所允许的最大大小,则添加操作可能会花费很长时间。

原因

出现此问题的原因是,当行的总大小接近允许的最大行大小时,SQL Server 将对表进行完全扫描,以确保添加新列不会违反数据完整性。 SQL Server 2012 之前的版本不执行此检查,从而使数据定义语言(DDL)的运行速度更快。 但是,如果行大小超过所允许的大小,此行为将导致后续操作(如行的更新或收缩)失败。

SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:

更多信息

  • 你可以使用启动参数打开跟踪标记647。 有关信息,请参阅 数据库引擎服务启动选项

  • 你可以运行以下查询(请将 <表名> 替换为实际表名),以便在对生产系统执行操作之前测试特定表,并计划此问题的效果。 如果结果大于8060,则你的表受此问题的制约。 此外,如果已删除列,则必须使用 "重建" 选项来更改表。 重建表可使查询返回正确的结果。

    select  1+1+2 + 2 +  (case  when sum (case when leaf_offset < 0 then 1 else 0 end) > 0 then 2 else 0 end)  +  ( (count (*) + 7)/8 ) + count (case when leaf_offset < 0 then 1 else null end) * 2 +  sum( case when max_length=-1 then 24 else max_length end)  from sys.system_internals_partition_columns   col join sys.partitions par on col.partition_id = par.partition_id  where object_id = object_id ('<table name>')  and  index_id in (0,1) and partition_number =1 
  • 当应用程序经常向表中添加新列时,可以考虑添加可变长度列或稀疏列。 它是一个仅元数据的操作,即使所有列的总大小超过8060字节,也是如此。

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?
按“提交”即表示你的反馈将用于改进 Microsoft 产品和服务。 你的 IT 管理员将能够收集此数据。 隐私声明。

谢谢您的反馈!

×