【问题标题】:Executing Multiple Insert Statements, what's the Best Way?执行多个插入语句,最好的方法是什么?
【发布时间】:2009-06-14 15:33:19
【问题描述】:

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

Loop
Generate Insert Statement String
SQLCommand.Text = Generated Insert Statement String
SQLCommand.Execute().
End Loop

Close Connection

简单地构造一大串插入,用分号分隔是否更好。并且只运行一条 SQLCommand.Execute() 语句?还是没有区别?

谢谢!

【问题讨论】:

    标签: sql database sql-server-2005 database-connection


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      在此处查看更多信息:http://msdn.microsoft.com/en-us/library/5ha4240h.aspx

      【讨论】:

      • 不,它没有。您启动显式事务,然后显式提交或回滚。您无需更改此设置。
      • 嗯.. 我并不是要全局禁用自动提交,只是针对当前事务批处理。我会改变答案!
      • 最后提交所有内容有什么好处。而不是将所有插入语句附加到一个用分号分隔的语句中,然后直接执行该语句一次?
      • 一方面,您不能(轻松)处理绑定参数。你正在绑定你的参数,对吧?另一个是客户端内存使用量(语句长度乘以要发送的语句数)。最后,如果服务器发回一个错误,您可以直接处理它,并且可能只丢弃一条语句而不是整个批处理。可能还有很多其他原因......
      【解决方案3】:

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

      【讨论】:

      • 是吗? UNION 和 Bulk 副本一直存在
      • 它将多个插入直接添加到 T-SQL 中。插入 Blah (foo, bar) 值 (1, 2), (3, 4)。您可以使用 UNION 和 bcp 执行操作,但这是一个方便的附加功能,可以减少冗长。
      【解决方案4】:

      将它们批量处理会快得多,否则 sql 服务器必须查看执行计划等,具体取决于循环和语句的大小,我可能最终一次发送 N 条记录,并且然后让它回来,只是给自己一些喘息的空间。您可能要考虑的另一件事(我来这里就好像它的“丢弃代码”,[一次性])只是进行批量加载。 SSIS 也是一种选择...

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • 确实如此;这是一个名为 bcp 的程序。
        【解决方案6】:
        猜你喜欢
        • 2019-09-30
        • 2012-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-07
        • 2019-09-16
        • 1970-01-01
        相关资源
        最近更新 更多