【问题标题】:how can i send a lot of data to a database using stored procedure?如何使用存储过程将大量数据发送到数据库?
【发布时间】:2011-01-24 09:47:44
【问题描述】:

我需要一次将大量数据从服务器(使用 c#)发送到数据库,例如所有数据都是 'csv' 格式,我需要将它一次传递给数据库.. 数据库功能是在数据库中实现的,我的意思是我使用的是存储过程方式(T-SQL)...

我尝试使用“批量插入”方式并且它有效...但不幸的是它仅适用于文件...我不需要使用文件,我需要以另一种方式传递它,例如一个字符串或无论如何但不是文件...

我该怎么做??

这是“批量插入”的网站 http://msdn.microsoft.com/en-us/library/ms188365.aspx

非常感谢...

【问题讨论】:

  • 你说的数据库功能是在数据库中实现的究竟是什么意思??
  • 他说他使用存储过程。所以他似乎想从 ASP.NET 批量发送到存储过程。
  • 我的意思是,我正在使用存储过程...

标签: .net sql tsql


【解决方案1】:

您也可以使用表值参数。请在下面提到的链接中找到更多详细信息。

http://blog.sqlauthority.com/2008/08/31/sql-server-table-valued-parameters-in-sql-server-2008/

http://msdn.microsoft.com/en-us/library/bb675163.aspx

希望对你有帮助。

【讨论】:

  • 是的...... SQL 2005 呢?这些功能在 2005 年也可用吗?并且,非常感谢 ;)
  • 表值参数不适用于 SQL Server 2005,我认为对于 sql server 2005 使用应该使用 xml。
【解决方案2】:

您有以下选择

  1. SQL 导出导入向导

  2. 以编程方式使用 bcp 实用程序 http://msdn.microsoft.com/en-us/library/ms162802.aspx

【讨论】:

    【解决方案3】:

    一种方法是创建 xml 并将其发送到解释 xml 的 sp。

    improving ms sql insert performance with lazarus

    编辑1添加示例代码

    创建测试表

    create table TestTable (Id int, Name nvarchar(50))
    

    创建从xml插入表的存储过程

    create procedure XMLInsertToTestTable
        @Data xml
    as
    insert into TestTable (Id, Name)
    select
        r.r.value('Id[1]', 'int'),
        r.r.value('Name[1]', 'nvarchar(50)')
    from @Data.nodes('root/row') r(r)
    

    以 xml-string 作为参数调用过程

    exec XMLInsertToTestTable
      '<root>
        <row> 
          <Id>1</Id>
          <Name>Name 1</Name>
        </row>    
        <row> 
          <Id>2</Id>
          <Name>Name 2</Name>
        </row>    
      </root>'
    

    【讨论】:

    • 不幸的是“Mikael Eriksson”,即使使用 xml 我也必须使用文件方式...我想避免使用文件方式...这可能吗?非常感谢“Mikael Eriksson”
    • 在此处使用 XML 不会影响性能,因为必须解析 XML...等等 有没有更有效的方法,也许?
    • @Voulnet,是的,它必须被解析。我认为 XML 不如 bcp 快,但比一次添加一行要快得多。唯一确定的方法是自己做一些测试。
    • @Q8Y,为什么/在将 xml 传递给存储过程时需要文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多