web-dev-qa-db-ja.com

BULK INSERTを使用するときに特定の列を無視する

構造がカンマ区切りのテキストファイルである

field1   field2   field3   field4
1        2        3        4

テキストファイルを一括挿入するために次のスクリプトを作成しましたが、3列目は省略したいと思いました

create table test (field1 varchar(50),field2 varchar(50),field4 varchar(50))
go
bulk insert test
from 'c:\myFilePath'
with 
(fieldterminator=',',
rowterminator='\n'
)

挿入は正常に機能しましたが、挿入の結果はfield4がfield3、field4のように見えるため、フィールド3は実際には単にfield4に連結されました。私が使用しているフラットファイルはいくつかのギグであり、簡単に変更することはできません。一括挿入を使用する方法はありますが、create tableステートメントで宣言されていない列を無視する方法はありますか?

11

これを行うには、フォーマットファイルを使用できます。

http://msdn.Microsoft.com/en-gb/library/ms178129.aspx

http://msdn.Microsoft.com/en-gb/library/ms179250.aspx

または、少し活気のある方法が必要な場合は、それをすべてインポートして、後で列をドロップします。 ;)

8
Janine Rawnsley

最も簡単な方法は、必要な列だけを含むビューを作成することです。

次に、そのビューに一括挿入します。

例:

create table people (name varchar(20) not null, dob date null, sex char(1) null)

--If you are importing only name from list of names in names.txt

create view vwNames as
select name from people

bulk insert 'names.txt'
10

一括挿入を実行する代わりに、フィールドを無視することはできません。4列すべてをロードし、不要な列をドロップします。

create table test (field1 varchar(50),field2 varchar(50), field3 varchar(50),field4 varchar(50))
go
bulk insert test
from 'c:\myFilePath'
with 
(fieldterminator=',',
rowterminator='\n'
)

ALTER TABLE test DROP column [field3]
5
user2418601