批量Insert SQL语句问题

michaelzxc 2006-01-08 02:50:49
我有一个网页需要从TextArea上传一千条记录信息,然后插入后台数据库中,ASP中的实现是通过循环调用一千次插入的存储过程,但是这样的执行效率非常低,前台网页需要等好几分钟才能得到上传成功的消息,请问有没有什么好的办法,能够在几秒钟之内完成这一千条记录的插入问题,请各位高手不吝赐教,谢谢。
...全文
532 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
michaelzxc 2006-01-11
  • 打赏
  • 举报
回复
to:八卦兔子
你的学问太高深了,我决定还是用ASP调用DLL去做
thanks anyway
michaelzxc 2006-01-11
  • 打赏
  • 举报
回复
八卦兔子:有没有兴趣跟我一起干啊,考虑一下吧
擒兽 2006-01-11
  • 打赏
  • 举报
回复
Mark
ytzz 2006-01-09
  • 打赏
  • 举报
回复
Mark先
  • 打赏
  • 举报
回复
那给你简单讲一下数学期望,并把你的问题建立一个数学模型

你要去检查textarea的值是不是在数据库了,现在你的方法是这样的:每一次都检查一下,然后呢,再去添加

我想到的呢是:按k个一组,混合在一起去检查一次,如果这个k个混合的都不是和数据库里相同就一次性的insert,否则就分别进行化验,这样总共要化验k+1次,假定,textarea的值与数据库中的相同的概率是p,且textarea的值都是互不影响的话,我们可以用如下方法解:

q=1-p,则k个值的混合不在数据库中的概率为q的k次方,有可能在的概率为1-q的k次方,而textarea的值需要检查的次数的X是一个随机变量,其分布率为:
X 1/k 1+(1/k)
pk q的k次方 1-q的k次方
于是每个textarea的值平均需化验的次数为
E(X)=(1/k)*q的k次方+(1+1/k)(1-q的k次方)=1-q的k次方+1/k
N个数平均需化验的次数为
N*(1-q的k次方+1/k)
由此可知,只要选择k使
1-q的k次方+1/k<1

q的k次方-1/k>0
当p固定时,我们选取k使得
L=1-q的k次方+1/k
取得最小值,这时就是最好的分组方法,当然我们这里有个概念就是不能大于8000个字符的上限

例如p=0.1当k=4时,若N=1000,那么N个值平均只需化验
594次

你看明白了么??就是每4个一组的检验方法
  • 打赏
  • 举报
回复
join 是一个script函数

参考帖子http://community.csdn.net/Expert/topic/4497/4497092.xml?temp=.9665644

一般情况下无所的,如果碰上大字符串连接的时候就需要,不用看meizz写的,看底下的vbs版本的

还有可以找个手册看看
  • 打赏
  • 举报
回复
制造一个存储过程

@str是一个输入值
exec sp_executesql @str


asp里是这么写
sql="insert into tryfangq([user],[count]) values('x',1)"
sql=sql & " insert into tryfangq([user],[count]) values('t',2)"

asp怎么调用存储过程我就不写了,这样的是一次调用全部执行


michaelzxc 2006-01-09
  • 打赏
  • 举报
回复
你说话怎么如此高深呢
你不会是专们做CSDN的吧
  • 打赏
  • 举报
回复
概率论有一个方法,学的时候模型是匹配血液测试的,可以查查书

做为大数,你可以统计大概每多少个有一个相同的,而且这个数字不超过8k个字符,也就是10条左右的样子

这样的话用一个select .... where id in (...,...,....)
如果都不存在的话用那个方法,每次十几个,这样的效率也比你原来的效率要好一些
michaelzxc 2006-01-09
  • 打赏
  • 举报
回复
我照你的方法试了一下,有两个问题不知如何解决:1,我需要的是1000条Insert SQL语句,每条语句可能有1000个字符长,总共最长可能是100万个字符,SQL Server最大只支持8000个字符;2,Insert的内容可能数据库中已经有了这条记录,这时候就要用Update语句,而且最后要统计总共插入了多少条有效记录。这两个问题该如何解决呢?
谢谢!
  • 打赏
  • 举报
回复
q:444547460
msn:liuxiaoyi666@hotmail.com

不过一般不在线,q发请求时写上csdn
michaelzxc 2006-01-09
  • 打赏
  • 举报
回复
你真是个天才,我对你的景仰有如滔滔江水,留个联系方式吧,有空还要多多向您请教请教。
michaelzxc 2006-01-09
  • 打赏
  • 举报
回复
to 八卦兔子:
看是看懂了一点,只是不知道在ASP里面怎么调用这一段Transact-SQL
还有你说的什么"构造字符串也要优化 join"是啥意思
  • 打赏
  • 举报
回复
还有不光是执行的时候可以优化,构造字符串也要优化 join
Hellohuan 2006-01-08
  • 打赏
  • 举报
回复
用&代替+就好看点了
晕晕的~~
  • 打赏
  • 举报
回复
declare @a nvarchar(200)

set @a='insert tryfangq([user],[count]) values('+''''+'x'+''''+',5)'
set @a=@a+' insert tryfangq([user],[count]) values('+''''+'x'+''''+',5)'
exec sp_executesql @a

不知道这么写,你看懂没?只用执行一次

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧