sql插入的列数不确定怎么办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql插入的列数不确定怎么办相关的知识,希望对你有一定的参考价值。

假设一个数据表有十个字段,第一次插入的记录,可能只有前两个字段有值,后八个字段为空,第二次插入的记录可能只有前五个字段有值,后五个字段为空,也即是说,每次插入的记录在哪些字段上非空,是不确定的,现在是用c#编程,记录都是事先存在字符串里面的,但因为无法确切得知每次要插入哪些字段,所以就没办法用insert语句了,该怎么办啊?

很简单,你需要做两个工作
1是建立数据表时,要建立主键为自增的整型字段,比如id,这个字段是为了保证数据不重复用的
2是在读取字符串时,需要进行格式化,比如用逗号分隔
,4,,3,,4,2
4,3,4,,,,2
,,,,,,,4
之类的,不知道你看懂没有,连你自己都不能确定数据在哪个位置,程序更没办法确定了,所以你要定义规则
然后把读取的数据套入insert语句里,稍微格式化一下,空着的位置加入"",表示空数据,当然如果是数值型的,要写个0,这和数据类型有关,需要的知识是字符串处理,很简单的
希望你能成功追问

我做的东西跟你说的差不多,一条记录是存在一个字符串里,然后用逗号隔开的,我是用split(',')来把它分割后再插入的,目前程序做倒是也做出来了,就是像楼上的朋友回答的插入空值。但是考虑到一些性能方面的问题,诸如:“1,2,,,,3,,,,,,,,,,,,,”这样的一条记录,里面空的太多,我目前做的项目是有30列字段的(这是别人要求,我无权更改),要插入的空值太多了,所以我是想知道有没有什么更好的办法使程序运行更快一些

追答

C#里面不是有个dategrid控件吗?你完全可以读入文件,然后直接update操作,数据库就自动更新了,也不需要你补空值了,这是对于数据量大的一种做法。
我比较熟悉的是PB,里面有datawindow控件,可以直接利用import()函数倒入文件,然后upadte()函数更新,后台是你的数据表,速度快极了
可能你担心每行数据都要上百次的插入空值,担心速度,如果数据少其实一眨眼就行,如果确实担心速度,可以用我说的方法试试,你找找C#相关操作

参考技术A 碰到这个问题,一般是用 C# 生成 insert into 语句。
比如生成: insert into a(v1, v3) values(11, 22);

insert into a(v5 ,v9, v19) values(11, 22, 10);

感觉用这个。方法比较方便。毕竟。C#比SQL。方便嗄~~追问

具体要怎么生成啊,而且列名并不是像V1,V2这样的有编号的

追答

不像 V1,和V2 这样有编号的。
总归有某种对应关系吧。。。
如果没有,你插入的时候怎么插入呢。。。

参考技术B 怎么就没法用insert语句了。。。你把所有的属性值都插入为“ ” 然后有值的用新值覆盖 不就完了 参考技术C 先建立表
1> CREATE TABLE test_tab (
2> id INT,
3> val VARCHAR(10)
4> );
5>
6> go

然后加字段
1> ALTER TABLE test_tab
2> ADD user_number VARCHAR(18) UNIQUE;
3> go
参考技术D 最简单的就是全插了,空的就插空,反正都是变量,复杂点的话就做判断呗!追问

我做的这个东西是有30列的,目前我的做法就是全插,因为我也想不到更好的办法。
问题是如果列数比较多怎么办,比如有100列,但是有些记录可能只有前面7,8个字段,后面一直插空的话好像做了太多无用功啊

追答

哪果这个东西,你必须要在到台数据库解决的话,要是我做的话,就是做一个insertinto 和value的对应关系,然后根据对应关系做判断,组合成insert into的字符串,如果values或是select里面的值有空的话都不组合,然后执行这个字符串,不知道你明白没有!

追问

能详细点说吗?程序已经交付了,这几天也忘了过来看看,不过我还是想知道更好的做法

本回答被提问者采纳

sqlserver 如何向数据库插入多条数据 数据条数不确定

有个页面有个table 可以动态添加行数的 把table 中的数据添加到数据库

参考技术A             using (SqlConnection conn = new SqlConnection("链接字符串"))
            
                using (SqlBulkCopy bulk = new SqlBulkCopy("链接字符串"))
                
                    //一次插入多少行数据
                    bulk.BatchSize = 1000;
                    bulk.DestinationTableName = "表名";
                    bulk.ColumnMappings.Add("数据源中的列", "数据库中的列");
                    bulk.WriteToServer(DataTable);
                
            

追问

谢谢你的回答 请帮我看下这个

http://zhidao.baidu.com/question/582590570493958365.html?quesup2&oldq=1
主要是把这里的数据插入的数据库 我该怎么做

参考技术B 你只要将table里面现有的数据添加到数据库就行了,其实就是多条数据插入,至于你说的table可以动态添加行数和table数据插入数据库没关系,

我想你是不是担心table动态添加行数后,插入数据代码怎么写的问题,所以才问这个问题的追问

对 就是动态生成行数后 我怎么能把这些行的数据一次插入数据库 我不知道该怎么获取值了 我现在在做动态生成行那

追答

其实问题的关键是你所说的动态是什么样的动态,它一定是有什么规律的,不可能杂乱无章的,其实你可以根据id来查询,数据库里面的数据和table里面的数据是一样的,有关联的,因为数据添加id是也有增加的,有顺序的,

例如5条数据,id一般最大就是5,你每次添加数据之前可以查一下数据库数据最大id,这只是一个比喻,你可以考虑下

本回答被提问者采纳
参考技术C 如果你是java的ssh框架,可以尝试:
页面动态添加某行后,失去该行焦点后AJAX提交该行数据存储,不用每次都把一大堆数据存储追问

先谢谢了 不过我的是.net的 不过思路我还是借鉴了一下

以上是关于sql插入的列数不确定怎么办的主要内容,如果未能解决你的问题,请参考以下文章

java 操作Excel,循环每一行的列,为啥列数不相同呢。

例外:尽管范围是从数据创建的,但数据中的列数与范围中的列数不匹配

Union All 的列数不匹配

多网格中的列数不起作用!反应虚拟化

SqlServer如何查询表的列数

PHP ~ 列数与第 1 行的值数不匹配