2011-04-06 45 views
0

我的SQL Server 2005數據庫與一些形式如何在不使用bcp的情況下將數據批量插入SQL Server?

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

的表我有一個Java Servlet的需要能夠批量添加信息,這些表。 SQL Server數據庫在與Servlet不同的機器上運行,並且我無權訪問該計算機的文件系統。

我的理解是,因爲它要求的數據文件是服務器的文件系統(我不能這樣做)的,我不能使用批量插入,它要求你填寫在各個領域(不能做,一個字段是由數據庫填寫的身份字段),或者讓未填寫的字段成爲最後一個字段(我將身份/ ID字段放在第一位,並且不想改變它),並且要求格式文件爲在服務器的文件系統上。

在MySQL中,我只是簡單地使用Load Data Local InFile。 SQL Server 2005似乎缺乏這樣的能力。我只是想念一些東西?有沒有辦法讓我使用bcp或批量插入一次向SQL Server表添加多條記錄?

TIA,

格雷格

+1

[數據文件 - 「是包含的數據導入到指定表或視圖BULK INSERT可以從磁盤導入數據的數據文件(完整路徑。包括網絡,軟盤,硬盤等等)。「](http://msdn.microsoft.com/en-us/library/ms188365.aspx) – 2011-04-06 20:22:35

回答

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,並在你需要做這樣的事情

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, ... 
+0

謝謝,那可行。我將通過JDBC將它發送到SQL Server。你知道使用JDBC 4可以發送給SQL Server 2005的命令的最大長度嗎? – 2011-04-06 20:42:05

+0

不,我不..但考慮到你的需要,你可以批量說你的文本文件中的每50或100行。因此,文本文件中的每行50-100行都會運行插入語句。我會嘗試查看JDBC命令將首先保留多少 – 2011-04-06 20:43:01

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

+0

不可以,我有權訪問servlet的文件系統,我只是無法訪問SQL Server服務器的文件系統。我的Servlet運行在Linux上,而不是Windows。 – 2011-04-06 20:36:34

+0

@Greg Dougherty您可以嘗試SQL Server上的'BULK INSERT FROM'指向一個網絡共享服務帳戶需要權限,共享需要存在,等等。或者,使用大型XML通過SP插入? – 2011-04-06 20:42:30

相關問題