求助题目:表DataTable结构有5个字段 CvsId DataId DataType Size Value假设有个名字为dataSend的函数,此函数以每秒会发送1-10000条数据不等的速度持续发送数据过来,
以结构体形式发送,上述5个字段的值都是封在结构体中的设计一个接口,接收dataSend发送过来的数据,并写入数据库DataTable表中 要求: 1,当接收的数据达到10000条时,一次性将数据存入DataTable表中,不够10000条时先预存起来不插入
2,如果从开始接收据后10秒钟时还没有收到10000条记录,那么将这10秒接收的数据插入DataTable表中
(有多少条插入多少条)
3,一次性向表中插入10000条数据的时间不能超过1000毫秒(尽可能高效)如何设计函数接口(c++实现,数据库为SqlServer2005)及sql语句来实现上述功能主要是框架和sql语句的写法,执行sql语句可以用Excute(string sqlStr)来完成,小弟初步想用存储过程来写,但是效率总上不来,请高手们帮帮忙
以结构体形式发送,上述5个字段的值都是封在结构体中的设计一个接口,接收dataSend发送过来的数据,并写入数据库DataTable表中 要求: 1,当接收的数据达到10000条时,一次性将数据存入DataTable表中,不够10000条时先预存起来不插入
2,如果从开始接收据后10秒钟时还没有收到10000条记录,那么将这10秒接收的数据插入DataTable表中
(有多少条插入多少条)
3,一次性向表中插入10000条数据的时间不能超过1000毫秒(尽可能高效)如何设计函数接口(c++实现,数据库为SqlServer2005)及sql语句来实现上述功能主要是框架和sql语句的写法,执行sql语句可以用Excute(string sqlStr)来完成,小弟初步想用存储过程来写,但是效率总上不来,请高手们帮帮忙
现在的设想是10000条也在程序里判断,之前的数据先存到字符串里,满足条件一次性传给存储过程,插入DataTable表。因为接收数据的速度会很快,量也会很大,所以尽可能的减小数据库操作次数,减小数据库的负担。 其实主要还是按照记录数量来判断,时间上的判断可以后期再加进去,关键是存储过程的写法很头疼
就比如说我传进来 01 zhang 25 beijing 02 li 22 shanghai 我把它们存到一个字符串中,当然中间可以加任何分隔字符,只要有利于插入的时候区分字段就可以,然后一次性传入,想达到插入后
id name age addr
01 zhang 25 beijing
02 li 22 shanghai
这种效果,要怎么写呢
用SQL语句只能从一个表的数据完成批量插入的。形成XML字符串是一个方法,如果不这样,只能形成一个格式字符串,保存为本地文件,然后用类似bcp之类的方法批量导入,否则,只能用MSSQL的内部接口了,应该有直接从内存批量插入数据的接口的。
DataTable表有5个字段
因为
insert into DataTable select '1','11','s','5','abcde' union all select '2','15','b','6','abcdef'; 这样可以向DataTable表中插入2行记录所以我想可不可以这样:declare @strData varchar;
set @strData = '1'',''11'',''s'',''5'',''abcde'' union all select ''2'',''15'',''b'',''6'',''abcdef';定义这样一个字符串作为参数传给存储过程但是存储过程的定义我就不会写了create procedure add_table @strData varchar as insert into table select @strData;
exec add_table @strData;大概思路是这样,但是定义的时候因为表有5个字段,这样传一个参数会出现
“插入错误:列名或所提供值的数目与表定义不匹配”这种情况有什么办法可以解决吗?大家帮忙参考下
http://www.cio360.net/h/1784/321881-2028.html,我在sqlserver中试过了,语法上没问题,实际速度不知道如何。