Tsql 如何向大容量insert语句添加参数以防止SQL注入并提高性能?

Tsql 如何向大容量insert语句添加参数以防止SQL注入并提高性能?,tsql,sql-injection,bulkinsert,Tsql,Sql Injection,Bulkinsert,我正在从web上的一个用户导入一个包含15万行的文件,该文件必须被分解,从而导致大约160万个条目被添加到数据库中 此时,我首先添加主记录,然后使用第一条记录后面提供的键添加子记录 虽然我可以预编译查询并重新使用它,但我希望将它们组合在一起,但我担心此时无法对查询进行参数化 目前,我仅通过查询方法以大约300行或3000次查询/秒的速度导入数据。我不确定您对如何加载数据有何限制,但有一些好方法可以获得良好的数据库批量导入率->。在处理数据导入过程时,我总是发现将其分为几个阶段很有帮助: 导入阶段

我正在从web上的一个用户导入一个包含15万行的文件,该文件必须被分解,从而导致大约160万个条目被添加到数据库中

此时,我首先添加主记录,然后使用第一条记录后面提供的键添加子记录

虽然我可以预编译查询并重新使用它,但我希望将它们组合在一起,但我担心此时无法对查询进行参数化


目前,我仅通过查询方法以大约300行或3000次查询/秒的速度导入数据。

我不确定您对如何加载数据有何限制,但有一些好方法可以获得良好的数据库批量导入率->。在处理数据导入过程时,我总是发现将其分为几个阶段很有帮助:

  • 导入阶段-根据您的情况提供各种不同的批量方法
  • 阶段-过程工作;e、 g.数据验证、关键关系建立、数据清理等
  • 最终插入到“活动”表中。(基于集合的插入)
  • 它可以非常有效地在第一个过程中拾取所有数据,几乎不需要逻辑工作,并将其大量移动到暂存区域;为此,可以进入临时表或永久临时表。然后,您可以对数据执行任何处理工作,以使所有内容都得到正确的结构化和清理,然后再将它们大量插入到活动表中的最终主页中。这还可以通过一个或多个中间步骤使您免受任何恶意数据或sql注入攻击

    这种分离允许批量导入任务以尽可能快的速度完成,因为希望不需要太多的逻辑就可以批量导入到一个大的暂存倾倒场。然后,您可以应用所需的任何逻辑来分割数据,不管它是多么合适。此外,如果您有几个步骤需要在准备阶段完成,那么您可以将其分解为需要多少较小的步骤,并将重点放在优化最大/最慢的部分上

    在您的情况下,如果有一种方法可以在进入暂存阶段后对数据进行结构化,以匹配活动表中的数据,那么您可能可以将其作为一个大集合插入。能够在最终插入之前的暂存阶段建立PK->ForeignKey关系(以及处理任何其他数据处理工作),可以让您从迭代插入转到一个大批量集插入。。。当然,如果你的系统/约束允许你这样做


    我不确定这是否适用于你的情况,我是否偏离了你的要求;但是,希望其中有一些有用的东西。

    我所知道的提高大数据负载性能的唯一方法是使用,但这对于第一步没有帮助,即插入父行以生成外键值。这可能有助于处理儿童行,尽管我确实想过使用临时表来处理这一问题。也许将行的索引添加到更大的集合中,并在将数据移动到活动表中时使用实际id更新它们。我认为这会起作用,但它仍然不能解决更大的问题。我接受这一点,因为这个概念是正确的,应该遵循,即使它没有解决问题的参数。。