我正在尝试更改表中的列。现有的表是这样的:
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]
Run Code Online (Sandbox Code Playgroud)
现在我试图在这个表上执行这个 sql:
ALTER TABLE [table] ALTER COLUMN [xmlData] XML
Run Code Online (Sandbox Code Playgroud)
这样我就可以删除 xml 模式并用新的模式替换它。
但我收到此错误:
无法创建大于允许的最大行大小 8060 的大小为 8074 的行。
谁能告诉我这里有什么问题?
我正在运行 sql 2008 r2 并且数据库在过去 3 年中运行良好且快速,直到大约 3 个月前我们在非常活跃和使用过的表上添加了 ntext 字段。现在我们开始用尽服务器空间,因为这个表的大小越来越大。
我读到了缩小,我们不想放松 db 的索引,因为它多年来一直在快速工作,而且我们不想让碎片消耗殆尽。
我们决定删除该字段及其所有值: 有没有办法删除 ntext 字段及其所有值并释放空间而不删除索引,不缩小,不损失数据库性能?
我附上 db size 查询输出,以显示过去 5 个月的大小扩展。