Sql server 实体框架-行大小大于允许的最大行大小8060

Sql server 实体框架-行大小大于允许的最大行大小8060,sql-server,sql-server-2008,entity-framework,Sql Server,Sql Server 2008,Entity Framework,我在SQL Server中有一个具有二进制数据类型的实体和相应的varbinary(max)列。EF创建了以下内容: CREATE TABLE [dbo].[Attachments] ( [Id] INT IDENTITY(1,1) NOT NULL, [FileName] NVARCHAR(255) NOT NULL, [Attachment] VARBINARY(MAX) NOT NULL ); 当我试图从Entity Framework调用.SaveChange

我在SQL Server中有一个具有二进制数据类型的实体和相应的
varbinary(max)
列。EF创建了以下内容:

CREATE TABLE [dbo].[Attachments] 
(
    [Id] INT IDENTITY(1,1) NOT NULL,
    [FileName] NVARCHAR(255) NOT NULL,
    [Attachment] VARBINARY(MAX) NOT NULL
);
当我试图从Entity Framework调用
.SaveChanges()
时,我得到一个错误:

无法创建大于允许的最大行大小8060的大小为8061的行

我理解这个错误,谷歌上有很多这样的错误,但我不明白为什么我会得到它。这不应该由实体框架/SQLServer管理吗


Richard

我能看到您在该表定义中出现此错误的唯一方法是,如果您以前有一个较大的固定宽度列,但后来该列被删除了

CREATE TABLE [dbo].[Attachments] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [FileName] nvarchar(255) NOT NULL,
    [Attachment] varbinary(max) NOT NULL,
    Filler char(8000),
    Filler2 char(49)
);

ALTER TABLE  [dbo].[Attachments] DROP COLUMN Filler,Filler2

INSERT INTO [dbo].[Attachments]
([FileName],[Attachment])
VALUES
('Foo',0x010203)

Msg 511,级别16,状态1,第12行无法创建大小为8075的行 大于允许的最大行大小8060

如果是这种情况,请尝试重建表

ALTER TABLE [dbo].[Attachments] REBUILD 

做得很好,那个人:)我也有类似的想法,但我在谷歌的拖网让我尝试DBCC CLEANTABLE。你的建议恰到好处。非常感谢!事实上,在结构更改后重建表是一种很好的做法。它大大提高了性能!martin,我遇到了同样的问题,遗憾的是我们目前正在使用sql 2005,有没有办法在不删除表内容的情况下重建表?@user确实改变了表。。。2005年不存在重建?遗憾的是,不存在。