如何一次性插入或更新多行数据

时间:2022-09-20 20:10:42
程序是基于C/S模型的 里面有个功能需要插入或更新连续60行记录,比如ID100-160,由于数据库在服务器上,如果简单的进行循环插入或更新,会延迟非常厉害,不知道有没办法避免

13 个解决方案

#1


拼接插入或更新语句,一次性传到服务器执行.

#2


还可以从服务器获取一个空的recordset,用recordset.add方法添加记录,然后用 update 方法执行.

#3


你在程序里将插入或更新的SQL字符串循环拼接后,然后连接数据库直接一次性执行。

#4


如果是更新,则用记录集将数据下载,然后在程序里更改记录集中的内容,然后执行record的 update 方法.

#5


可以些存储过程拼接字符串  然后在程序中调用。

#6


60行就延迟得厉害了

#7


先在数据集中修改,比如我做过C#的,在DataSet中先进行操作.然后一次性更新到数据库

#8


update tableA set tableA.xx=xx,.....
where id between xx and xx

#9


语句拼接和用记录集一次性操作 哪一种效率更高

#10


引用 9 楼 lin_c 的回复:
语句拼接和用记录集一次性操作 哪一种效率更高
一样的

#11


1、从SqlServer考虑,可以用BCP命令,批量导入数据,但BCP只能在本地执行!

EXEC master..xp_cmdshell 'BCP PMS.dbo.table1 in c:\table1.txt -c -t";" -r"\n\r" -S"Fred" ' 

 EXEC master..xp_cmdshell  'bcp "testdb.dbo.test" out "C:\123.txt" -c -q -U"sa" -P"sa"'



EXEC   master..xp_cmdshell   'bcp   testdb.dbo.test in  "c:\test1.txt" -F 2  -c   -t";"  -r"\n" -k  -U"sa" -P"sa" '

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:\currency_format1.fmt -c -T'

2、从代码上,如果是.net开发环境,建议使用【SqlBulkCopy】,批量导入导出,速度可比BCP导入

#12


引用 9 楼 lin_c 的回复:
语句拼接和用记录集一次性操作 哪一种效率更高

貌似用记录集操作要高一些,但如果是更新的话,最好是只有你这个客户端在用数据库,否则有那么一点可能会产生脏数据.

#13


搞定了,还有一个问题就是如果网络延迟了,他就直接弹出错误,然后程序就崩溃了 你们一般怎么处理连接超时的?
	if(adCmd==adCmdTable)
sRecordset=srecordset;
else
sRecordset="("+srecordset+") DERIVEDTBL";
try
{
 rst=m_pConnection->Execute((_bstr_t)srecordset,NULL,adCmd);
}
catch(_com_error&e)
{
this->GetErrors(e);
return false;
}

#1


拼接插入或更新语句,一次性传到服务器执行.

#2


还可以从服务器获取一个空的recordset,用recordset.add方法添加记录,然后用 update 方法执行.

#3


你在程序里将插入或更新的SQL字符串循环拼接后,然后连接数据库直接一次性执行。

#4


如果是更新,则用记录集将数据下载,然后在程序里更改记录集中的内容,然后执行record的 update 方法.

#5


可以些存储过程拼接字符串  然后在程序中调用。

#6


60行就延迟得厉害了

#7


先在数据集中修改,比如我做过C#的,在DataSet中先进行操作.然后一次性更新到数据库

#8


update tableA set tableA.xx=xx,.....
where id between xx and xx

#9


语句拼接和用记录集一次性操作 哪一种效率更高

#10


引用 9 楼 lin_c 的回复:
语句拼接和用记录集一次性操作 哪一种效率更高
一样的

#11


1、从SqlServer考虑,可以用BCP命令,批量导入数据,但BCP只能在本地执行!

EXEC master..xp_cmdshell 'BCP PMS.dbo.table1 in c:\table1.txt -c -t";" -r"\n\r" -S"Fred" ' 

 EXEC master..xp_cmdshell  'bcp "testdb.dbo.test" out "C:\123.txt" -c -q -U"sa" -P"sa"'



EXEC   master..xp_cmdshell   'bcp   testdb.dbo.test in  "c:\test1.txt" -F 2  -c   -t";"  -r"\n" -k  -U"sa" -P"sa" '

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:\currency_format1.fmt -c -T'

2、从代码上,如果是.net开发环境,建议使用【SqlBulkCopy】,批量导入导出,速度可比BCP导入

#12


引用 9 楼 lin_c 的回复:
语句拼接和用记录集一次性操作 哪一种效率更高

貌似用记录集操作要高一些,但如果是更新的话,最好是只有你这个客户端在用数据库,否则有那么一点可能会产生脏数据.

#13


搞定了,还有一个问题就是如果网络延迟了,他就直接弹出错误,然后程序就崩溃了 你们一般怎么处理连接超时的?
	if(adCmd==adCmdTable)
sRecordset=srecordset;
else
sRecordset="("+srecordset+") DERIVEDTBL";
try
{
 rst=m_pConnection->Execute((_bstr_t)srecordset,NULL,adCmd);
}
catch(_com_error&e)
{
this->GetErrors(e);
return false;
}