由于产品底层设计的情况,sqlserver 列设置了 可以随用户 创建自动生成
项目特殊,设置的列过多,有三四百列(通常不会过多)
数据无法正常保存,报错”不能创建大小为 8190 的行,该大小大于所允许的最大行大小 8060 “,
数据库每一列都是数据加密存储
第一步:怀疑了代码中sql语句过长,sql参数过多,尝试分批执行 ,依然报错
第二步:查阅相关资料得知,数据中一行的数据,如果存数据字节总大小 超过 8060 是不允许的。
因为我们的列都是 varbinary的列,又因为每一列 数据需要加密存储,尝试改为指针类型字段例如text,
考虑字段过多,同时数据过大,以及涉及到代码中字段类型处理的地方较多,最终放弃。
第三步:查阅资料尝试 重建索引,依然未成功
第三步:因为原始数据,都是数值类型,只是使用加密算法之后,每一列字节都超过70.查阅sql的内置加密函数(
SQLSERVER加密解密函数(非对称密钥 证书加密 对称密钥)
ENCRYPTBYASYMKEY() --非对称密钥
ENCRYPTBYCERT() --证书加密
ENCRYPTBYKEY() --对称密钥
ENCRYPTBYPASSPHRASE() --通行短语(PassPhrase)加密
找到的相关函数 ,包括当前项目在用的短语加密,进行尝试之后,发现,加密之后的 字节都时很长,最终放弃
最终解决方案:自己写了一个密码表,进行数据加密解密(缩短加密之后的数据),同时算法中支持历史数据的解密,再次保存是会以新的加密方式进行保存
当然这也许是 不治本的方式,
每个项目都有其历史因素,和项目本身的特殊性,综合行业情况,以及项目因素,也是一个 可以接受的解决方式了。
报错提示:
警告: 已经
创建
表 'xxxx',但是它的
最大
行
大小
超过了
允许
的
最大
字节数
8060
。如果得到的
行
超过此
大小
限制,则对此表的 INSERT 或 UPDATE 操作将失败。
不能
创建
...
GridViewRow rowHeader = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
TableCell th = new TableHeaderCell();
TableCell td = new TableC...
BBP_INB_DELIVERY_CREATE 是 SAP 系统
中
的一个交货单
创建
函数模块,其
中
的
行
项目
编号是用来标识
创建
的交货单
中
的每一个
行
项目
的。如果填充的
行
项目
编号不起作用,可能是由于以下几种原因造成的:
1.
行
项目
编号已经被使用过了。SAP 系统
中
的
行
项目
编号是唯一的,如果你填充的
行
项目
编号已经被其他交货单使用过了,那么这个编号就
不能
再被使用。
2.
行
项目
编号不符合系统规定的格式。SAP 系统
中
有严格的
行
项目
编号格式规定,如果你填充的
行
项目
编号不符合这些规定,那么系统可能会不识别这个编号。
3.
行
项目
编号填写错误。如果你在填充
行
项目
编号的时候打错了字或者数字,那么系统也可能
不能
识别这个编号。
如果你遇到了
行
项目
编号不起作用的问题,建议你检查一下这些可能的原因,并按照系统规定的格式填写
行
项目
编号。