web-dev-qa-db-ja.com

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

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$]')

また、SQL ServerでHKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Textの下のレジストリキーFormatCSVDelimitedからTabDelimitedに変更すると、上記のCSVクエリはタブ区切りの文字を正しく読み取りますテキストファイルですが、コンマ区切りのテキストファイルは読み取られないので、そのままにしたくないと思います。

OPENROWSETFormat=TabDelimitedを使用しようとしても機能しない

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

TextレジストリキーをEnginesキーとISAM Formatsキーの両方から、デフォルトでTabDelimitedになるカスタムのカスタムキーにコピーしようとしましたが、まだ読み取っていますCSVFormat形式ではなくTabDelimitedのファイルがあるため、ここで何か欠落している必要があります。

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

SQL Server 2005を使用しています

14
Rachel

開くテキストファイルと同じディレクトリに、区切り文字を含む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を各テキストファイルの独自のディレクトリに含めることができます。

13
dartonw

多分 SSMS:Excelからデータをインポート(コピー/貼り付け)する方法 が役立ちます(OPENROWSETを使用したくない場合、またはそれに対する権限がない場合)。

0
Denis