簡體   English   中英

SQL 服務器批量插入

[英]SQL Server Bulk Insert

我想將一列文本文件導入我的 sql 表之一。 該文件只是一個臟話列表。

我寫了以下 TSQL 來做到這一點

BULK INSERT SwearWords
FROM 'c:\swears.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)

但是,它會因意外的文件結尾而出錯。 我導入到的表只是一個標識字段,后跟一個我想將文本插入到的 nvarchar 字段。 如果我將文本文件“1”添加到每一行的開頭,它就可以正常工作,我認為這是因為如果要查找 2 個字段,則為 SQL。 有沒有辦法解決?

謝謝

為此,您需要使用 FORMATFILE。 請參閱批量插入

FORMATFILE [ = 'format_file_path' ]

指定格式文件的完整路徑。 格式文件描述的數據文件包含使用 bcp 實用程序在同一個表或視圖上創建的存儲響應。 在以下情況下應使用格式文件:

 * The data file contains greater or fewer columns than the table or view. * The columns are in a different order. * The column delimiters vary. * There are other changes in the data format. Format files are usually created by using the bcp utility and modified with a text editor as needed. For more information, see bcp Utility.

有關更多詳細信息,請參閱 使用格式化文件

這在 KEEPIDENTITY 參數下的 BULK INSERT 在線書籍中有所描述。 這是說的

KEEPIDENTITY 指定標識列的值存在於導入的文件中。 如果未給出 KEEPIDENTITY,則導入的數據文件中該列的標識值將被忽略,SQL 服務器根據建表時指定的種子值和增量值自動分配唯一值。 如果數據文件不包含表或視圖中標識列的值,則使用格式文件指定在導入數據時應跳過表或視圖中的標識列; SQL 服務器自動為列分配唯一值

因此,要么使用格式文件,要么提供一個虛擬值,並確保不使用 KEEPIDENTITY 參數

此外,您可以僅基於 nvarchar 列在表上創建一個視圖,然后將 BULK INSERT 插入到您的視圖中。 這是使用 BULK INSERT 的一種非常干凈的方式。

這樣您就不必擔心您的 IDENTITY 列或創建格式文件。

您的 BULK INSERT 語句應如下所示:

BULK INSERT vw_SwearWords FROM 'c:\swearwords.txt' WITH (ROWTERMINATOR = '\n')

您需要確保文本文件的結構與表格匹配 - 如果表格有兩個字段,那么您還必須在文本文件中提供兩個字段/列。

由於 SQL 表中的第一列是一個 IDENTITY 字段,您可以提供任何您想要的值 - 但您必須在那里有一個值,我認為沒有任何解決辦法。

馬克

檢查最后一行是否有 CR/LF (\r\n)。 有時這就是問題所在,有時文件末尾有一個額外的回車符。 您可以使用十六進制編輯器進行檢查。

您可以刪除標識列並在完成后將其放回原位。 或者,如果這破壞了您的數據庫關系,您可以使用 DTS 或 SSIS 進行導入(如果它是一次性導入)——更精細地控制擺弄列

在 SQL Server 2008 中,我發現更容易創建一個包含大量插入的文件,並將其粘貼到 Management Studio 的查詢 window 中,而不是為獲得格式文件和批量插入文件權限而斗爭:

USE YourDB
GO
INSERT INTO MyTable (FirstCol, SecondCol)
VALUES ('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)

http://blog.sqlauthority.com/2008/07/02/sql-server-2008-insert-multiple-records-using-one-insert-statement-use-of-row-constructor/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM