"Es kann keine Zeile der Größe 8074 erstellt werden, die größer als die zulässige maximale Zeilengröße von 8060 ist", während die Tabelle geändert wird

18

Ich versuche, eine Spalte in einer Tabelle zu ändern. Die vorhandene Tabelle sieht folgendermaßen aus:

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]

Jetzt versuche ich, diese SQL für diese Tabelle auszuführen:

ALTER TABLE [table] ALTER COLUMN [xmlData] XML

Damit ich das XML-Schema löschen und durch ein neues ersetzen kann.

Aber ich erhalte diesen Fehler:

Es kann keine Zeile der Größe 8074 erstellt werden, die größer als die zulässige maximale Zeilengröße von 8060 ist.

Kann mir jemand sagen, wo das Problem liegt?

marc_s
quelle

Antworten:

24

Wenn Sie zuvor Spalten in dieser Tabelle entfernt oder geändert haben, müssen Sie möglicherweise Speicherplatz zurückfordern, bevor dieser Vorgang erfolgreich ist. SQL Server beansprucht nicht immer / normalerweise sofort Speicherplatz für gelöschte oder geänderte Spalten.

Wenn es sich bei den vorherigen Vorgängen ausschließlich um das Entfernen (oder Ändern) von Spalten variabler Länge handelte, sollte die Ausgabe DBCC CLEANTABLEausreichen. Andernfalls müssen Sie die Tabelle neu erstellen. Sie können dies tun, indem Sie den Clustered-Index neu erstellen:

ALTER INDEX PK_table
ON dbo.table
REBUILD 
WITH (ONLINE = ON); -- Enterprise only, optional
Paul White sagt GoFundMonica
quelle