请教不规则大小数组如何存入sqlserver数据库中 5C

在做一个网络项目,例如我接收到一个不规则长度的数组数据

int[][] data=new int[4][];
    data[0]=new int[3];
    data[1]=new int[4];
    data[2]=new int[5];
    data[3]=new int[6];

目前设计的数据库字段是4个字段 data1,data2,data3,data4
假设本次存储完的数据为

    1   1   1   1
    2   2   2   2
    3   3   3   3
    NULL    4   4   4
    NULL    NULL    5   5
    NULL    NULL    NULL    6
    NULL    NULL    NULL    NULL
    假设data1又接收到新的数据,我该如何填入第四行中,这个该如何判断
    我的数据库字段该如何设计比较合理

7个回答

可以转换成字符串,把字符串存到数据库中

表设计成  
id , value ,  type或者len update_time

1 4 3 2019-01-01
2 4 3 2019-01-01
3 4 3 2019-01-01
就是把原来的表行列倒置,这样不会有null.但是行数比以前增加了。

试试转成json字符串进行存储, 用的时候在转回来

转成带分隔符的字符串序列存数据库字段,用时再解析

转化为同一数组进行合并,或者for循环,依次添加每个数组的值

数据库,字符串字段,格式为json格式,[[0,0,0],[0,1,2,3],[0,2,4,6,8],[0,3,6,9,12,15]]
可以使用JsonConvert.SerializeObject()串行化为字符串存放到数据库中,
使用JsonConvert.DeserializeObject(json)还原为不规则数组

int[][] intAA = new int[4][];
            for(int i=0;i<intAA.Length;i++)
            {
                intAA[i] = new int[i + 3];
            }
            for(int i=0;i<intAA.Length;i++)
            {
                for(int j=0;j<intAA[i].Length;j++)
                {
                    intAA[i][j] = i * j;
                }
            }
            string json = JsonConvert.SerializeObject(intAA);
            var str1 = "[[0,0,0],[0,1,2,3],[0,2,4,6,8],[0,3,6,9,12,15]]";
            var obj= JsonConvert.DeserializeObject<int[][]>(json);

表格要加一个主键ID,自增的也可以,主要用来定位
data1来数据时
if exists(select * from tbData where data1 is null) --有data1为空的记录就更新
update tbData
set data1=@Data
where ID=(select min(ID) from tbData where data1 is null) --找最早的那条记录来更新
else
insert into tbData(data1) --data1都不为空,就新增一条记录
values(@data1)

data1和data2同时来数据时
if exists(select * from tbData where data1 is null and data2 is null) //有data1和data2同时为空的记录就更新
update tbData
set data1=@Data1,data2=@data2
where ID=(select min(ID) from tbData where data1 is null and data2 is null) --找最早的那条记录来更新
else
insert into tbData(data1,data2) --没有data1和data2同时都不为空的,就新增一条记录
values(@data1,@data2)

以上我是直接写出来的,可能有语法错误,大概的意思就是有符合的同时写入条件的记录的就更新,没有 就新增

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!