SSMSからタブ区切りファイルをクエリできますか?


14

Sql Server Management Studioからタブ区切りファイルをクエリして、どこにも保存せずにデータを表示することは可能ですか?

私はあなたがBULK INSERT次のようなものを使用してタブ区切りファイルからできることを知っています:

BULK INSERT SomeTable
FROM 'MyFile.txt'
WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n');

ただし、事前に列を把握し、データを保持するテーブルを作成する必要があります。

またOPENROWSET、次のようなExcelドライバーを使用して事前に列を定義せずに、CSVやExcelなどの他のファイルタイプを照会できることも知っています。

-- Query CSV
SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Text;Database=\\Server\Folder\;HDR=Yes;', 
    'SELECT * FROM MyFile.csv')

-- Query Excel
SELECT *
FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 
    'Excel 8.0;Database=MyFile.xls', 
    'SELECT * FROM [Sheet1$]')

私は、レジストリキーを変更した場合も、FormatHKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\TextからCSVDelimitedTabDelimitedSQL Server上で、上記のCSVクエリは正しく、私は私が欲しいとは思わないので、しかし、それはもはや、カンマ区切りのテキストファイルを読み込みます、タブ区切りのテキストファイルを読み込みませんそのままにしておきます。

で使用しようFormat=TabDelimitedとしてもOPENROWSET機能しません

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Text;Database=\\Server\Folder\;HDR=Yes;Format=TabDelimited', 
    'SELECT * FROM MyFile.txt')

TextレジストリキーをキーEnginesISAM Formatsキーの両方からデフォルトでにカスタマイズされたものにコピーしようとしましTabDelimitedたが、まだフォーマットではCSVFormatなくファイルを読み込んでいるTabDelimitedので、ここで何かを見逃す必要があります。

テーブルを作成せずにタブ区切りファイルを照会してその内容を表示する方法はありますBULK INSERTか?

SQL Server 2005を使用しています


使用後にフラッシュされる動的に作成された一時テーブルを使用することは許容されますか?
jcolebrand

2番目の質問:Excelドライバーを使用してTDFを開くだけですか?Excelが魔法のようになることもあります。
jcolebrand

@jcolebrandはい一時テーブルを使用できますが、列リストは非常に長く、変更される可能性があるため、すべての定義を書き出す代わりに、興味のある列のみを指定できるようになります、不要な列が変更されるたびに更新することを忘れないでください。
レイチェル

@jcolebrand私はエクセルドライバーを試すとは思っていませんでしたが、今は有望に見えません。ファイル拡張子は実際.bakには通常の区切りファイル拡張子ではなく、最初の試行でエラーが表示されたCould not find installable ISAMため、これは機能しないと思います。
レイチェル

2
インポートに必要な列数、つまり動的に作成された一時テーブルに追いつくのではなく、ファイルからその場で列リストを毎回個人的に解析します(ファイルの最初の行でタブを数えるだけです) 。私の意見では、データからリバースエンジニアリングできるものをハードコーディングしないでください。
jcolebrand

回答:


13

開いているテキストファイルと同じディレクトリに、区切り文字を含むschema.iniファイルを作成する必要があります。これは、ファイルごとにレジストリ値をオーバーライドする唯一の方法です。MSDNのファイル形式のドキュメントを参照してください。例:

SELECT * 
FROM OPENROWSET(
    'Microsoft.ACE.OLEDB.12.0', 
    'Text; HDR=YES; Database=C:\Text', 
    'SELECT * FROM testupload2.txt')

C:\ Text \ schema.ini:

[testupload2.txt]
ColNameHeader=True
Format=TabDelimited
MaxScanRows=0

このアクティビティを頻繁に繰り返す必要がある場合は、schema.iniを作成するスクリプトをお勧めします。同じschema.iniで複数のファイルを参照することも、個別のschema.iniを独自のディレクトリの各テキストファイルに含めることもできます。


どうもありがとうございました!schema.iniファイルの使用のヒントを見ましたが、自分でスキーマを実装する方法を見つけるのに苦労していました。
レイチェル

これは古い投稿であることは知っていますが、「素敵な仕事」@dartonwと言わなければなりませんでした。
ジェフモデン14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.