无法创建大小为xxx的行,该行大于最大行大小8060

时间:2015-10-23 06:41:29

标签: sql-server-2008

我已经看过很多次这个问题了,其中大多数都以逻辑解释结束。我的表似乎没有接近最大行大小。

My Dev Server是SQL 2008 Express Edition

这是我的表定义。我有一个varchar(max)列,其余的列应该很小。 “备注”提交的文本不多,只有几个字符。

CREATE TABLE [dbo].[PegBoard](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [OwnersCorporationID] [int] NOT NULL,
    [PegNumber] [int] NOT NULL,
    [DepositRequired] [bit] NOT NULL,
    [KeyRegister] [bit] NOT NULL,
    [Notes] [varchar](max) NULL,
    [Locked] [bit] NOT NULL,
    [NonLoanable] [bit] NULL,
    [DepositAmount] [decimal](10, 2) NULL,
    [LastReviewedDate] [datetime] NULL,
 CONSTRAINT [PK_PegBoard] PRIMARY KEY NONCLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [PegBoard_PN_Cnst] UNIQUE NONCLUSTERED 
(
    [PegNumber] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

当我插入一行时,我收到以下消息。

  

错误:System.Data.SqlClient.SqlException:无法创建一行大小   8066,大于允许的最大行大小8060。

该声明已被终止。 当我向表中添加新列时,我看到了类似的警告,但直到现在它似乎都没有导致失败。

任何可能导致此问题的想法以及我可能尝试解决的问题。

先谢谢 大卫

更新

如果有帮助,这是我的审计表的结构。 触发器本身非常复杂,因为它是从我发现的自动执行所有表的一些代码生成的。

CREATE TABLE [dbo].[Audit](
[AuditID] [int] IDENTITY(1,1) NOT NULL,
[Type] [char](1) NULL,
[TableName] [varchar](128) NULL,
[PrimaryKeyField] [varchar](1000) NULL,
[PrimaryKeyValue] [varchar](1000) NULL,
[FieldName] [varchar](128) NULL,
[OldValue] [varchar](1000) NULL,
[NewValue] [varchar](1000) NULL,
[UpdateDate] [datetime] NULL,
[UserName] [varchar](128) NULL

)ON [PRIMARY]

1 个答案:

答案 0 :(得分:1)

一个常见的误解是,在任何情况下使用VARCHAR(MAX)都是个好主意......如果你真的需要处理大于8000字节的字符串,你可以考虑VARBINARY(MAX)或{{1 }}

阅读本文:https://www.simple-talk.com/sql/database-administration/whats-the-point-of-using-varchar(n)-anymore/

可能有效:请阅读:why row insert above 8053 bytes not giving error when it should because max allowed row limit is 8060

VARCHAR(MAX)的另一个问题是,在某些语句中,隐式使用的数据类型是" normal" varchar,你需要额外的演员表: 阅读:https://stackoverflow.com/a/33031838/5089204

Conclusio:如果你不想要真正大的文本,最好使用XML定义。