„Nie można utworzyć wiersza o rozmiarze 8074, który jest większy niż dopuszczalny maksymalny rozmiar wiersza 8060” podczas zmiany tabeli

18

Próbuję zmienić kolumnę w tabeli. Istniejąca tabela wygląda następująco:

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]

Teraz próbuję wykonać ten sql na tej tabeli:

ALTER TABLE [table] ALTER COLUMN [xmlData] XML

żebym mógł upuścić schemat xml i zastąpić go nowym.

Ale otrzymuję ten błąd:

Nie można utworzyć wiersza o rozmiarze 8074, który jest większy niż dopuszczalny maksymalny rozmiar wiersza 8060.

Czy ktoś może mi powiedzieć, na czym polega problem?

marc_s
źródło

Odpowiedzi:

24

Jeśli wcześniej usunąłeś lub zmodyfikowałeś kolumny w tej tabeli, może być konieczne odzyskanie miejsca, zanim operacja się powiedzie. SQL Server nie zawsze / zwykle natychmiast odzyskuje miejsce na upuszczone lub zmienione kolumny.

Jeśli wszystkie poprzednie operacje polegały na usunięciu (lub zmianie) kolumn o zmiennej długości, wydanie DBCC CLEANTABLEpowinno być wystarczające. W przeciwnym razie konieczne będzie przebudowanie tabeli. Możesz to zrobić, odbudowując indeks klastrowany:

ALTER INDEX PK_table
ON dbo.table
REBUILD 
WITH (ONLINE = ON); -- Enterprise only, optional
Paul White przywraca Monikę
źródło