"Impossible de créer une ligne de taille 8074 supérieure à la taille de ligne maximale autorisée de 8060" lors de la modification du tableau

18

J'essaie de modifier une colonne dans un tableau. La table existante est comme ceci:

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]

Maintenant j'essaye d'exécuter ce sql sur cette table:

ALTER TABLE [table] ALTER COLUMN [xmlData] XML

afin que je puisse supprimer le schéma xml et le remplacer par un nouveau.

Mais je reçois cette erreur:

Impossible de créer une ligne de taille 8074 supérieure à la taille de ligne maximale autorisée de 8060.

Quelqu'un peut-il me dire quel est le problème ici?

marc_s
la source

Réponses:

24

Si vous avez précédemment supprimé ou modifié des colonnes sur cette table, vous devrez peut-être récupérer de l'espace avant que cette opération réussisse. SQL Server ne récupère pas toujours / généralement immédiatement de l'espace pour les colonnes supprimées ou modifiées.

Si les opérations précédentes étaient toutes des suppressions (ou des modifications) de colonnes de longueur variable, l'émission DBCC CLEANTABLEdevrait être suffisante. Sinon, vous devrez reconstruire la table. Vous pouvez le faire en reconstruisant l'index clusterisé:

ALTER INDEX PK_table
ON dbo.table
REBUILD 
WITH (ONLINE = ON); -- Enterprise only, optional
Paul White réintègre Monica
la source