"Неможливо створити рядок розміром 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.