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


18

我正在尝试更改表中的列。现有表如下:

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模式并将其替换为新模式。

但我收到此错误:

无法创建大小为8074的行,该行大于允许的最大行大小为8060。

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

Answers:


24

如果您以前已删除或修改了该表上的列,则可能需要回收空间才能成功执行此操作。SQL Server并不总是/通常不会立即为删除或更改的列回收空间。

如果先前的操作是全部删除(或更改)变长列,则发布DBCC CLEANTABLE就足够了。否则,您将需要重建表。您可以通过重建聚集索引来做到这一点:

ALTER INDEX PK_table
ON dbo.table
REBUILD 
WITH (ONLINE = ON); -- Enterprise only, optional
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.