"Não é possível criar uma linha do tamanho 8074 que seja maior que o tamanho máximo permitido da linha de 8060" enquanto altera a tabela


18

Estou tentando alterar uma coluna em uma tabela. A tabela existente é assim:

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]

Agora estou tentando executar este sql nesta tabela:

ALTER TABLE [table] ALTER COLUMN [xmlData] XML

para que eu possa descartar o esquema xml e substituí-lo por um novo.

Mas estou recebendo este erro:

Não é possível criar uma linha do tamanho 8074 que seja maior que o tamanho máximo permitido da linha de 8060.

Alguém pode me dizer qual é o problema aqui?

Respostas:


24

Se você removeu ou modificou colunas anteriormente nesta tabela, pode ser necessário recuperar espaço antes que esta operação seja bem-sucedida. O SQL Server nem sempre / geralmente recupera imediatamente espaço para colunas descartadas ou alteradas.

Se as operações anteriores foram todas remoções (ou alterações) de colunas de comprimento variável, a emissão DBCC CLEANTABLEdeve ser suficiente. Caso contrário, você precisará reconstruir a tabela. Você pode fazer isso reconstruindo o índice em cluster:

ALTER INDEX PK_table
ON dbo.table
REBUILD 
WITH (ONLINE = ON); -- Enterprise only, optional
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.