"Impossibile creare una riga di dimensioni 8074 che è maggiore della dimensione massima consentita di 8060" durante la modifica della tabella


18

Sto cercando di modificare una colonna in una tabella. La tabella esistente è così:

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]

Ora sto cercando di eseguire questo sql su questa tabella:

ALTER TABLE [table] ALTER COLUMN [xmlData] XML

in modo da poter eliminare lo schema XML e sostituirlo con uno nuovo.

Ma sto ricevendo questo errore:

Impossibile creare una riga della dimensione 8074 che è maggiore della dimensione massima consentita della riga 8060.

Qualcuno può dirmi qual è il problema qui?

Risposte:


24

Se in questa tabella sono state rimosse o modificate colonne in precedenza, potrebbe essere necessario recuperare spazio prima che l'operazione abbia esito positivo. SQL Server non sempre / di solito recupera immediatamente lo spazio per le colonne eliminate o modificate.

Se le operazioni precedenti erano tutte rimozioni (o modifiche) di colonne a lunghezza variabile, l'emissione DBCC CLEANTABLEdovrebbe essere sufficiente. Altrimenti, dovrai ricostruire la tabella. È possibile farlo ricostruendo l'indice cluster:

ALTER INDEX PK_table
ON dbo.table
REBUILD 
WITH (ONLINE = ON); -- Enterprise only, optional
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.