«Невозможно создать строку размером 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.

Может кто-нибудь сказать мне, в чем здесь проблема?

Ответы:


24

Если вы ранее удалили или изменили столбцы в этой таблице, вам может потребоваться освободить место, прежде чем эта операция будет выполнена успешно. SQL Server не всегда / обычно не сразу освобождает место для удаленных или измененных столбцов.

Если все предыдущие операции были удалением (или изменением) столбцов переменной длины, выдачи DBCC CLEANTABLEдолжно быть достаточно. В противном случае вам нужно будет восстановить таблицу. Вы можете сделать это, перестроив кластерный индекс:

ALTER INDEX PK_table
ON dbo.table
REBUILD 
WITH (ONLINE = ON); -- Enterprise only, optional
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.