web-dev-qa-db-ja.com

SQL Serverでテキストファイルを読み取る

SQLクエリ(SQL Server 2005)からテキストファイルを読み取ろうとしていますが、まったく運がありません。 EXECとxp_cmdshellでさまざまなことを試しましたが、すべてが機能していません。これは私がこれにアプローチしようとした一般的な方法です:

CREATE TABLE temp (data varchar(2000));
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt';

次に、一時テーブルからデータを選択しようとします。私はよく検索しましたが、何が間違っているのかわかりません。助けて?

33
Markus O'Reilly

テキストファイルはどのように見えますか?各行がレコードですか?

BULK INSERT ステートメントをチェックアウトする必要があります。次のようになります。

BULK INSERT dbo.YourTableName
FROM 'D:\directory\YourFileName.csv'
WITH
(
  CODEPAGE = '1252',
  FIELDTERMINATOR = ';',
  CHECK_CONSTRAINTS
) 

ここでは、私の場合、CSVファイルをインポートしていますが、テキストファイルもインポートできるはずです。

MSDNドキュメントから-行ごとに1つのフィールドがあるテキストファイルでうまく機能するサンプルを次に示します。

BULK INSERT dbo.temp 
   FROM 'c:\temp\file.txt'
   WITH 
      (
         ROWTERMINATOR ='\n'
      )

私のテスト環境ではうまく動作しているようです:-)

41
marc_s

ちょうどこれを発見しました:

SELECT * FROM OPENROWSET(BULK N'<PATH_TO_FILE>', SINGLE_CLOB) AS Contents

ファイルの内容をvarchar(max)としてプルします。置換SINGLE_CLOB with:

SINGLE_NCLOB nvarchar(max)SINGLE_BLOB for varbinary(max)

http://www.mssqltips.com/sqlservertip/1643/using-openrowset-to-read-large-files-into-sql-server/ に感謝します!

41
Cain

一度にファイルをテーブルに読み込む場合は、BULK INSERTを使用する必要があります。一方、ファイルを1行ずつ解析して独自のチェックを行う場合は、次のWebをご覧ください。 https://www.simple-talk.com/sql/t-sql -program-/reading-and-and-write-files-in-sql-server-using-t-sql / xp_cmdshellまたは他のOLEオートメーション機能をアクティブにする必要がある可能性があります。単純なGoogle itとスクリプトが表示されます。

0
Rodrigo

これを1回行う必要がありますか、それとも通常のデータベース操作の一部として(つまり、トリガー、スケジュールされたイベントなどに応じて)行う必要がありますか?

どちらにしても、SSISパッケージを作成する方が良いでしょう。

  1. SQL Management Studioで、データベースを右クリックします。
  2. タスク|データのインポート...を選択します.
  3. ウィザードの指示に従います。プロンプトが表示されたら、プロバイダーとして「フラットテキストファイル」を選択します。

私はdbo.xp_cmdshellを使用していません(例によって)が、出力のキャプチャが問題だと思います。

0
3Dave