【问题标题】:Multiple inserts in one SQL query一个 SQL 查询中的多个插入
【发布时间】:2011-08-01 09:33:46
【问题描述】:

数据库:SQL 服务器

我正在使用以下构造将多条记录插入表中。我正在从其他数据库接收数据(要插入)。

插入表1 选择 '1','2' UNION ALL 选择 '3','4' UNION ALL 选择'5','6';

是否还有其他机会在更短的周转时间内进行插入。它也作为网络请求执行。我猜大容量插入不适合这里,因为我没有文件中的数据来进行大容量插入。 请有任何建议..

【问题讨论】:

    标签: sql sql-server insert bulkinsert


    【解决方案1】:

    如果源数据库也是 SQL Server,您可以添加链接服务器:

    insert table1 select * from linkedserver.dbname.dbo.table1
    

    如果您从 .NET 代码插入,插入多行的最快方法是 SqlBulkCopy。 SqlBulkCopy 确实需要 DBO 权限。

    【讨论】:

    • 由于数据在其他数据库中,我不能直接在选择查询中涉及。我将它提取到我的变量中并执行此插入
    • 是的,我是从 .Net 插入的,我会看看 Ando
    【解决方案2】:

    这实际上是我见过的最好的多重插入。请注意 SQL 注入,在 ASP.NET 中始终使用 CommandParameters 或在 MySQL 中使用 mysql_real_escape。

    【讨论】:

      【解决方案3】:

      我最近调查了这个,来自 MySQL 并期待 cularis 答案的语法,但经过一番搜索,我只能找到你在答案中发布的语法。

      编辑:看起来 cularis 删除了他的答案,他在谈论 INSERT INTO x VALUES (1, 2), (3, 4); 语法。

      【讨论】:

      • @cularis 可以在 SQL Server 2008+ 中使用
      【解决方案4】:

      如果您使用的是 SQL Server 2008 和存储过程,则始终可以使用表值参数:

      http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

      然后它变成INSERT INTO ... SELECT * FROM ...

      这将有助于解决注入问题。不确定这是否可以通过参数化 SQL 实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-27
        • 1970-01-01
        相关资源
        最近更新 更多