相关文章推荐
温柔的沙滩裤  ·  javascript - Mapping ...·  1 年前    · 
另类的紫菜汤  ·  c++ atomic bool ...·  1 年前    · 
酷酷的火柴  ·  Material Design 之 ...·  1 年前    · 

由于产品底层设计的情况,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. 项目 编号填写错误。如果你在填充 项目 编号的时候打错了字或者数字,那么系统也可能 不能 识别这个编号。 如果你遇到了 项目 编号不起作用的问题,建议你检查一下这些可能的原因,并按照系统规定的格式填写 项目 编号。