"Tidak dapat membuat baris ukuran 8074 yang lebih besar dari ukuran maksimum baris yang diijinkan 8060" sambil mengubah tabel

18

Saya mencoba mengubah kolom dalam sebuah tabel. Tabel yang ada seperti ini:

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]

Sekarang saya mencoba menjalankan sql ini di tabel ini:

ALTER TABLE [table] ALTER COLUMN [xmlData] XML

sehingga saya bisa menghapus skema xml dan menggantinya dengan yang baru.

Tapi saya mendapatkan kesalahan ini:

Tidak dapat membuat baris ukuran 8074 yang lebih besar dari ukuran maksimum baris yang diijinkan 8060.

Adakah yang bisa memberi tahu saya apa masalahnya di sini?

marc_s
sumber

Jawaban:

24

Jika sebelumnya Anda telah menghapus atau memodifikasi kolom pada tabel ini, Anda mungkin perlu merebut kembali ruang sebelum operasi ini berhasil. SQL Server tidak selalu / biasanya segera mendapatkan kembali ruang untuk kolom yang jatuh atau diubah.

Jika operasi sebelumnya semua pemindahan (atau perubahan) kolom panjang variabel, mengeluarkan DBCC CLEANTABLEharus cukup. Jika tidak, Anda harus membangun kembali tabel. Anda dapat melakukan ini dengan membangun kembali indeks berkerumun:

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