SQLクエリ(SQL Server 2005)からテキストファイルを読み取ろうとしていますが、まったく運がありません。 EXECとxp_cmdshellでさまざまなことを試しましたが、すべてが機能していません。これは私がこれにアプローチしようとした一般的な方法です:
CREATE TABLE temp (data varchar(2000));
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt';
次に、一時テーブルからデータを選択しようとします。私はよく検索しましたが、何が間違っているのかわかりません。助けて?
テキストファイルはどのように見えますか?各行がレコードですか?
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'
)
私のテスト環境ではうまく動作しているようです:-)
ちょうどこれを発見しました:
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/ に感謝します!
一度にファイルをテーブルに読み込む場合は、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とスクリプトが表示されます。
これを1回行う必要がありますか、それとも通常のデータベース操作の一部として(つまり、トリガー、スケジュールされたイベントなどに応じて)行う必要がありますか?
どちらにしても、SSISパッケージを作成する方が良いでしょう。
私はdbo.xp_cmdshellを使用していません(例によって)が、出力のキャプチャが問題だと思います。