“ ไม่สามารถสร้างแถวที่มีขนาด 8074 ซึ่งมากกว่าขนาดแถวสูงสุดที่อนุญาตได้ที่ 8060” ในขณะที่เปลี่ยนตาราง


18

ฉันกำลังพยายามเปลี่ยนคอลัมน์ในตาราง ตารางที่มีอยู่เป็นดังนี้:

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]

ตอนนี้ฉันพยายามเรียกใช้ sql นี้ในตารางนี้:

ALTER TABLE [table] ALTER COLUMN [xmlData] XML

เพื่อให้ฉันสามารถวางสกีมา xml และแทนที่ด้วยใหม่

แต่ฉันได้รับข้อผิดพลาดนี้:

ไม่สามารถสร้างแถวขนาด 8074 ซึ่งมากกว่าขนาดแถวสูงสุดที่อนุญาตได้ที่ 8060

ใครสามารถบอกฉันว่าปัญหาคืออะไรที่นี่?

คำตอบ:


24

หากก่อนหน้านี้คุณได้ลบหรือแก้ไขคอลัมน์ในตารางนี้คุณอาจต้องเรียกคืนพื้นที่ก่อนที่การดำเนินการนี้จะสำเร็จ SQL Server ไม่เคย / มักจะเรียกคืนพื้นที่ทันทีสำหรับคอลัมน์ที่ถูกทิ้งหรือเปลี่ยนแปลง

หากการดำเนินการก่อนหน้าเป็นการลบ (หรือการเปลี่ยนแปลง) ทั้งหมดของคอลัมน์ความยาวผันแปรการออกDBCC CLEANTABLEควรจะเพียงพอ มิฉะนั้นคุณจะต้องสร้างตารางใหม่ คุณสามารถทำได้โดยการสร้างดัชนีคลัสเตอร์ขึ้นใหม่:

ALTER INDEX PK_table
ON dbo.table
REBUILD 
WITH (ONLINE = ON); -- Enterprise only, optional
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.