如何在不使用bcp的情况下将数据批量插入SQL Server?

时间:2011-04-06 20:20:21

标签: sql-server sql-server-2005 bulkinsert

我的SQL Server 2005 DB包含许多表格

Table (id <Primary Key, Identity column>, name <VarChar (255)>)

我有一个Java Servlet,需要能够批量向这些表添加信息。 SQL Server DB在与Servlet不同的机器上运行,我无法访问该机器的文件系统。

我的理解是我不能使用批量插入,因为它要求数据文件在服务器的文件系统上(我不能这样做),它要求你填写所有字段(不能这样做,一个字段是由DB填充的标识字段,或者是未填充的字段是最后一个字段(我将标识/ id字段放在第一位,并且不希望更改它),并且要求格式文件为在服务器的文件系统上。

在MySQL中,我只使用Load Data Local InFile。 SQL Server 2005似乎缺乏这样的功能。我只是错过了一些东西吗?有没有办法让我一次添加多条记录到没有使用bcp或Bulk Insert的SQL Server表?

TIA,

格雷格

2 个答案:

答案 0 :(得分:3)

INSERT INTO Table (column_name, ...)
Values
(column_values,...),(column_values,...),(column_values, ...), ...

请注意,这可以通过SQL Server 2008

实现

http://msdn.microsoft.com/en-us/library/ms174335%28v=SQL.100%29.aspx

对于SQL Server 2005和Under,您需要执行类似这样的操作

INSERT INTO table (column_name, column_name, ...)
SELECT column_value , column_value, ...
UNION ALL
SELECT column_value , column_value, ...
UNION ALL
SELECT column_value , column_value, ...
UNION ALL
SELECT column_value , column_value, ...
UNION ALL
SELECT column_value , column_value, ...

答案 1 :(得分:1)

所以你既没有访问servlet机器上的文件系统也没有访问SQL Server? (我不确定如何在MySQL中执行此操作,因为LOAD DATA LOCAL INFILE需要一个文件)。

ADO.NET支持SqlBulkCopy API:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx