如何使用存储过程将大量数据发送到数据库?

时间:2011-01-24 09:47:45

标签: .net sql tsql

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

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

我怎么能这样做?

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

非常感谢...

3 个答案:

答案 0 :(得分:2)

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

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

希望它对你有所帮助。

答案 1 :(得分:0)

一种方法是创建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>'

答案 2 :(得分:0)

您有以下选项

  1. SQL导出导入向导

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