Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 执行多个Insert语句,什么';这是最好的办法吗?_Sql_Database_Sql Server 2005_Database Connection - Fatal编程技术网

Sql 执行多个Insert语句,什么';这是最好的办法吗?

Sql 执行多个Insert语句,什么';这是最好的办法吗?,sql,database,sql-server-2005,database-connection,Sql,Database,Sql Server 2005,Database Connection,我有一个程序,其中需要对MS SQL表运行多个insert语句(动态生成)。现在,我需要(伪代码): 简单地构造一个由分号分隔的大插入字符串是否有更好的性能。并且只运行一个SQLCommand.Execute()语句?还是说这没什么区别 谢谢 您可能会发现这很有用。它显著减少了处理的语句数量。批处理它们的速度会快得多,否则sql server必须查看执行计划等。根据循环和语句的大小,我可能会一次发送N条记录,然后让它返回,只是给自己一些喘息的空间。另一件你可能要考虑的事情(我来这里就好像它的“扔

我有一个程序,其中需要对MS SQL表运行多个insert语句(动态生成)。现在,我需要(伪代码):

简单地构造一个由分号分隔的大插入字符串是否有更好的性能。并且只运行一个SQLCommand.Execute()语句?还是说这没什么区别


谢谢

您可能会发现这很有用。它显著减少了处理的语句数量。

批处理它们的速度会快得多,否则sql server必须查看执行计划等。根据循环和语句的大小,我可能会一次发送N条记录,然后让它返回,只是给自己一些喘息的空间。另一件你可能要考虑的事情(我来这里就好像它的“扔掉的代码”,[一次性的事情])只是在做大量的负载。SSIS也是一个选项…

在Postgres上,您可以使用COPY,它允许以类似CSV的格式进行批量插入。不知道sqlserver是否有类似的功能


另一种方法是使用存储过程,只需将一长串数据传递给某个后端插入循环。

如果您在此阶段有选择并有能力这样做,您可能需要升级到SQL Server 2008。它还有很多额外的好处,包括对T-SQL的一个补充,可以在一条语句中进行多个插入。

取决于您的多个语句的数量。但您肯定也应该看看Sql批量复制—非常快速,非常方便


Marc

在开始插入之前,您需要启动一个事务。然后,当您将所有插入发送到服务器并完成循环后,您应该提交。这将为您节省大量的数据库写入操作


请参阅此处的更多信息:

确实如此;这是一个叫做bcp的程序。不,不是。启动显式事务,然后显式提交或回滚。您不需要更改此设置。嗯。。我不是要全局禁用自动提交,只是针对当前事务批处理。我要改变答案!最后把所有事情都交出来有什么好处。与其将所有insert语句附加到一个由分号分隔的语句中,并直接执行该语句一次,不如说,您不能(轻松地)处理绑定参数。您正在绑定参数,对吗?另一个是客户端内存使用情况(语句长度乘以要发送的语句数)。最后,如果服务器发回一个错误,您可以立即处理它,并且可能只抛出一条语句,而不是整个批处理。可能还有很多其他原因…是吗?UNION和Bulk copy已经存在了很多年,它直接向T-SQL中添加了多个插入。插入Blah(foo,bar)值(1,2)、(3,4)。您可以使用联合和bcp进行操作,但这是一个方便的添加,可以减少冗长。
Loop
Generate Insert Statement String
SQLCommand.Text = Generated Insert Statement String
SQLCommand.Execute().
End Loop

Close Connection