sql-server – “更改表时,无法创建大小为8074的行,该行大于允许的最大行大小8060”

我正在尝试更改表中的列.现有表格如下:
CREATE TABLE [dbo].[table](
   [id1] [int] NOT NULL,[id2] [int] NOT NULL,[id3] [int] NOT NULL,[name] [nvarchar](255) NOT NULL,[id4] [int] NOT NULL,[xmlData] [xml](CONTENT [dbo].[xml_schema]) NULL,[booleanData1] [bit] NOT NULL,[notes] [varchar](4096) NULL,[id5] [int] NULL,[booleanData2] [bit] NULL,[id6] [int] NULL,CONSTRAINT [PK_table] PRIMARY KEY CLUSTERED 
   ([id1] ASC,[id2] ASC,[id3] ASC)
) ON [PRIMARY] TEXtimage_ON [PRIMARY]

现在我试图在这个表上执行这个sql

ALTER TABLE [table] ALTER COLUMN [xmlData] XML

这样我就可以删除xml架构并用新架构替换它.

但是我收到了这个错误

Cannot create a row of size 8074 which is greater than the allowable maximum row size of 8060.

谁能告诉我这里的问题是什么?

解决方法

如果先前已删除修改此表上的列,则可能需要在此操作成功之前回收空间. sql Server并不总是/通常立即为删除或更改的列回收空间.

如果先前的操作都是可变长度列的删除(或更改),则发出DBCC CLEANTABLE应该就足够了.否则,您将需要重建表.您可以通过重建聚集索引来完成此操作:

ALTER INDEX PK_table
ON dbo.table
REBUILD 
WITH (ONLINE = ON); -- Enterprise only,optional

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...