18

事前にテーブルを作成してその列を定義しなくても、 CSVファイルをSQLServerにインポートするための手っ取り早い方法を探しています。

インポートされた各CSVは、独自のテーブルにインポートされます。

データ型推論については心配していません。CSVは構造とレイアウトが異なり、すべてに多くの列がありますが、関心があるのは住所と郵便番号の一部だけです。CSVデータをSQLデータベースにすばやく取得し、関連する列を抽出したいだけです。

FieldTerminatorとRowTerminatorを提供し、CSVにポイントして、残りはユーティリティに任せたいと思います。BULK INSERTやOpenRowset(BULK ...)を使用して、すべて1つのステップでテーブルを作成し、データを入力する方法はありますか?

4

3 に答える 3

11

SQLServerPediaを参照すると、これは機能すると思います。

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

select TerritoryID
      ,TotalSales
      ,TotalCost
INTO CSVImportTable
from openrowset('MSDASQL'
               ,'Driver={Microsoft Access Text Driver (*.txt, *.csv)}'
               ,'select * from C:\csvtest.CSV')
于 2012-05-02T20:18:56.320 に答える
11

迷惑なことに、コメントするだけの担当者ポイントがまだないので、TyTに基づいて回答を追加します(所有格ではハンドルがひどいように見えますが...)

「ファイルが見つかりません」というエラーを回避するために、ワーカーコードにはシングルではなくダブル「\」が必要でした。また、フィールドを指定する必要はありません。それらはファイルの最初の行から推測されます:

select *
into   CsvImportTable
from   openrowset(
           'MSDASQL',
           'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
           'select * from C:\\csvtestfile.csv')

Accessドライバーに問題はありませんでした。

更新:タイプが正しく推測されない場合は、ファイルの先頭に、必要なタイプのデータを含む数行をテーブルに挿入して、たとえば、text->INTの代わりにtext->VARCHARと言ってください。インポート後にそれらの行を削除します。

最後のアイシングとして、データを操作できるようにテーブルにPKを追加します-ダミー行を削除します。

alter table CsvImportTable add Id int identity(1, 1)
于 2016-02-02T18:20:21.803 に答える
1

SQL Server ManagementStudio17を使用している場合の回答を更新しました。

[データベース]->[タスク]->[フラットファイルのインポート...]を右クリックします。

データの最初の行を列名として自動的に推測します。ターミネータ自動的に取得する必要があります。nullを許可して主キーを設定し、列のデータ型も指定するオプションが表示されます。

于 2019-09-25T21:43:49.933 に答える