繁体   English   中英

更改XML列上的强制性约束时出错

[英]Error when changing mandatoriness constraint on XML column

在我们的数据库中,有一个带有XML数据类型列的表。 该列是强制性的( not null ),我需要使其变为非强制性的( null )。 我写了一个类似于以下内容的脚本:

alter table [SomeSchema].[SomeTable] alter column [SomeColumn] XML null

我需要编写/测试回滚脚本,所以我写了一个类似于:

alter table [SomeSchema].[SomeTable] alter column [SomeColumn] XML not null

初始语句正确执行。 当我尝试测试/执行回滚时,出现以下错误:

消息511,第16级,状态1,第1行
无法创建大小为8082的行,该行大于允许的最大行大小为8060。该语句已终止。

这个问题似乎与行溢出有关 ,该行溢出应该不适用于XML类型(但在这种情况下似乎适用)。 仅当表中有某些记录(即受数据影响)时,才会出现此问题,但它似乎并不与数据的大小直接相关。 例如,一条记录的XML长度为10,473个字符,并触发了此问题。 另一条记录的XML长度为159,072个字符,并未触发此问题。

设定:

  • Windows XP SP3
  • SQL Server 2008 R2

我们的常驻数据库专家设法找到了一些代码来解决此问题(请参见下文),但仍然无法解释为什么会发生这种情况/有必要。 我们怀疑小于8060字节的XML将在行中存储,而较大的XML将在LOB存储中存储,并且以某种方式应用[非]强制性约束会导致行大小增加到超过此限制,但是SQL Server不能正常处理。 我们仍然不知所措:

  • 实际发生了什么
  • 为什么我们会收到此错误(SQL Server错误?我们的不良做法?)
  • 为什么对于某些已经大于8k的记录会发生这种情况

欢迎任何解释!

exec sp_tableoption '[SomeSchema].[SomeTable]', 'large value types out of row', 1;
go

alter table [SomeSchema].[SomeTable] drop constraint [ThePKConstraint]
go

alter table [SomeSchema].[SomeTable] add constraint [ThePKConstraint] primary key clustered
(
      [SomeIDColumn] asc,
      [SomeOtherIDColumn] asc
)
go

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM