Bisakah saya meminta file yang dibatasi tab dari SSMS?

14

Apakah mungkin untuk meminta file yang dibatasi tab dari Sql Server Management Studio untuk melihat datanya tanpa menyimpannya di mana saja?

Saya tahu Anda dapat BULK INSERTdari file tab-dibatasi menggunakan sesuatu seperti:

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

namun itu mengharuskan Anda mengetahui kolom sebelumnya dan membuat tabel untuk menyimpan data.

Saya juga tahu Anda dapat meminta beberapa tipe file lain seperti CSV atau Excel tanpa mendefinisikan kolom sebelumnya menggunakan OPENROWSETdan driver Excel, seperti:

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

Juga, jika saya mengubah kunci registri di Formatbawah HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Textdari CSVDelimitedke TabDelimitedpada SQL Server, permintaan CSV di atas akan dengan benar membaca file teks yang dibatasi tab, namun itu tidak akan lagi membaca file teks yang dibatasi koma sehingga saya tidak berpikir saya ingin meninggalkannya seperti itu.

Mencoba menggunakan Format=TabDelimiteddi OPENROWSETtidak berhasil juga

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

Saya telah melakukan beberapa upaya untuk menyalin Textkunci registri dari kedua Enginesdan ISAM Formatskunci untuk sesuatu yang kustom untuk default TabDelimited, namun masih membaca file dengan CSVFormatbukan TabDelimitedformat jadi saya harus kehilangan sesuatu di sini.

Apakah ada cara untuk meminta file dibatasi-tab untuk melihat isinya tanpa harus membuat tabel dan BULK INSERTitu?

Saya menggunakan SQL Server 2005

Rachel
sumber
Apakah dapat diterima untuk menggunakan tabel temp yang dibuat secara dinamis yang memerah setelah digunakan?
jcolebrand
Pertanyaan kedua: apakah Anda sudah mencoba menggunakan driver Excel untuk membuka TDF? Terkadang Excel ajaib.
jcolebrand
@ jcolebrand Ya saya bisa menggunakan tabel temp, tetapi daftar kolomnya cukup panjang dan dapat berubah, jadi saya lebih suka hanya bisa menentukan kolom yang saya tertarik daripada harus menulis definisi untuk semuanya , dan ingat untuk memperbaruinya kapan saja kolom yang tidak dibutuhkan berubah.
Rachel
@ jcolebrand Saya tidak berpikir untuk mencoba driver excel, meskipun saat ini tidak terlihat menjanjikan. Ekstensi file sebenarnya .bakyang bukan ekstensi file terbatas normal, dan kesalahan itu memberi saya pada percobaan pertama saya adalah Could not find installable ISAM, jadi saya tidak berpikir ini akan berhasil.
Rachel
2
Saya pribadi akan mem-parsing daftar kolom dengan cepat dari file setiap kali (cukup lakukan hitungan tab di baris pertama file) alih-alih mencoba mengikuti jumlah kolom yang diperlukan untuk impor, sehingga tabel temp dibuat secara dinamis . Menurut pendapat saya, jangan pernah membuat hard-code apa yang bisa Anda lakukan dengan merekayasa balik data.
jcolebrand

Jawaban:

13

Anda harus membuat file schema.ini yang berisi pembatas di direktori yang sama dengan file teks yang Anda buka. Ini adalah satu-satunya cara untuk mengganti nilai registri berdasarkan per-file. Lihat dokumentasi format file di MSDN . Contoh:

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

Dalam C: \ Text \ schema.ini:

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

Jika kegiatan ini perlu sering diulang, saya akan menyarankan skrip untuk membuat schema.ini. Beberapa file dapat direferensikan dalam schema.ini yang sama atau schema.ini terpisah dapat dimasukkan dengan setiap file teks dalam direktori sendiri.

dartonw
sumber
Terima kasih banyak! Saya telah melihat petunjuk menggunakan file schema.ini, namun saya mengalami kesulitan mencari tahu bagaimana menerapkannya sendiri
Rachel
Saya tahu ini adalah posting lama tetapi saya hanya perlu mengatakan "Nice Job" @dartonw.
Jeff Moden