建表时一个奇怪的问题?

sunchris 2008-02-15 04:00:54
CREATE TABLE [jbts] (
[autoid] [int] IDENTITY (1,1) NOT NULL,
[city] [nvarchar] (20), --所属城市
[qx] [nvarchar] (20), --所属区县
[unitname] [nvarchar], --被投拆人(单位)名称
[unitaddress] [nvarchar], --被投拆人(单位)地址
[wtlx] [nvarchar] (20), --问题类型
[summary] [nvarchar] (200), --问题摘要
[context] [nvarchar] (200), --内容简述
[username] [nvarchar] (20), --投诉人姓名
[userphone] [nvarchar] (20), --投诉人电话
[useraddress] [nvarchar] (100), --投诉人地址
[useremail] [nvarchar] (50), --投诉人E-Mail
[remark] [nvarchar] (100), --备注
[tmp1] [int] NULL,
[tmp2] [int] NULL,
[tmp3] [int] NULL,
[tmp4] [nvarchar],
[tmp5] [nvarchar],
[tssj] [smalldatetime] NULL, --投拆时间
[jjqk] [nvarchar] (4000), --解决情况
[rykx] [nvarchar] (1000), --人员款项
[gtqk] [nvarchar] (20), --与投诉人沟通情况
[zt] [nvarchar] (20), --案件状态
[bjqx] [smalldatetime], --报结期限
[jbyj] [nvarchar] (200), --交办意见
[zrbm] [nvarchar] (50), --责任部门
[bjsj] [smalldatetime], --报结时间
[jbfs] [varchar] (20), --交办方式
[jsbm] [nvarchar] (50), --经手部门
[star] [int] NULL DEFAULT (0), --评星数量
[tjsj] [smalldatetime], --退件时间
[tjly] [nvarchar] (100), --退件理由
[yqsj] [smalldatetime], --延期时间
[yqly] [nvarchar] (200), --延期理由
[sqsj] [datetime], --申请时间
[dbyj] [nvarchar] (200), --督办意见
[fujian] [nvarchar] (50), --附件路径
)

警告: 已创建表 'jbts',但其最大行大小(13433)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失败。

在查询分析器里创建此表时 就出这个警告提示~ 从来没遇见这种情况`请问高手怎么解决? 谢谢!
...全文
69 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunchris 2008-02-16
  • 打赏
  • 举报
回复
将nvarchar改为varchar 就好了`其他什么也没改` 谢谢!
changjiangzhibin 2008-02-15
  • 打赏
  • 举报
回复
好像为了安全起见,还是分表好些
kelph 2008-02-15
  • 打赏
  • 举报
回复
分表吧
我看你有些字段长度有些过大了,估计超出实际需要

建议挤挤吧
-狙击手- 2008-02-15
  • 打赏
  • 举报
回复
考虑分表吧
-狙击手- 2008-02-15
  • 打赏
  • 举报
回复
每个字段如果都按照最大长度加在一起,字节数超过8060就会出这个警告
bllackhu 2008-02-15
  • 打赏
  • 举报
回复
同用的数据库的版本也有关系

2005 Enterprise Edition上跑了上面的建表脚本没有同样的警告。

然后在2005 的books online上找到这么一段话:

错误号:25027

This error can occur in two instances: CREATE / ALTER TABLE or INSERT/UPDATE. SQL Server Compact Edition does not allow a row length of fixed column to exceed 8060 bytes. However, SQL Server Compact Edition allows a row to exceed a theoretical limit of 8060 bytes using variable length columns (NTEXT/IMAGE) are not included). For instance, a table could be created with 100 NVARCHAR columns with a length of 200 bytes without an error. However, if you use INSERT or UPDATE to modify a row in a column that had a variable length CHAR datatype (NVarChar) that caused the entire row length to exceed 8060 bytes, then this error would occur.
昵称被占用了 2008-02-15
  • 打赏
  • 举报
回复
这是个警告信息,每个字段如果都按照最大长度加在一起,字节数超过8060就会出这个警告

如果你确信你的字段不会超出 8060字节 就可以不理睬这个警告(比如,有两个nvarchar(4000)的字段,但是保证不会两个字段同时有值的情况),否则,这个表可能在以后添加或者修改记录的时候会出错


-布谷鸟- 2008-02-15
  • 打赏
  • 举报
回复
建议:
1,将nvarchar改为varchar,如果不是国际文字的话.
2,将那个nvarchar(4000)的字段改为ntext.
3,如果还不行,只有分表而建了.
昵称被占用了 2008-02-15
  • 打赏
  • 举报
回复
所有varchar字段按照实际的可能最大设置长度,如果这个提示没消失,就必须考虑分表了
dawugui 2008-02-15
  • 打赏
  • 举报
回复
将某些字段的长度减小.
dawugui 2008-02-15
  • 打赏
  • 举报
回复
其最大行大小只能为为8060.

超过了的话是不行的

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧