Sekmeyle ayrılmış bir dosyayı SSMS'den sorgulayabilir miyim?


14

Sekmeyle ayrılmış bir dosyayı, verilerini herhangi bir yere kaydetmeden görüntülemek için Sql Server Management Studio'dan sorgulamak mümkün müdür?

BULK INSERTSekmeyle ayrılmış bir dosyadan şöyle bir şey kullanarak yapabileceğinizi biliyorum :

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

ancak bu önceden sütunları bilmenizi ve verileri tutmak için bir tablo oluşturmanızı gerektirir.

Ayrıca, önceden sütunları OPENROWSETve Excel sürücülerini kullanarak tanımlama yapmadan CSV veya Excel gibi diğer dosya türlerini sorgulayabileceğinizi de biliyorum :

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

Ben kayıt defteri anahtarını değiştirmek Ayrıca, Formataltından HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Textgelen CSVDelimitedetmek TabDelimitedSQL Server üzerinde, yukarıda CSV sorgu doğru, istediğim sanmıyorum ancak artık bir virgülle ayrılmış metin dosyası okuyacak bir sekme ile sınırlandırılmış metin dosyası okuyacak böyle bırakmak.

Kullanmaya çalışmak Format=TabDelimitediçinde OPENROWSETya da çalışmıyor

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

Ben kopyalamak için bazı teşebbüslerde bulundu Texthem kayıt defteri anahtarlarını Enginesve ISAM Formatsvarsayılan bu tuşlar bir şeye özel TabDelimited, ancak yine de dosya okuma CSVFormatyerine TabDelimitedburada bir şey eksik gerekir böylece biçimi.

Sekmeyle ayrılmış dosyayı tablo oluşturmak zorunda kalmadan içeriğini görüntülemek için sorgulamanın bir yolu var mı BULK INSERT?

SQL Server 2005 kullanıyorum


Kullanımdan sonra yıkanmış, dinamik olarak oluşturulmuş bir geçici tablo kullanmak kabul edilebilir mi?
jcolebrand

İkinci soru: TDF'yi açmak için Excel sürücülerini kullanmayı denediniz mi? Bazen Excel büyülü olabilir.
jcolebrand

@jcolebrand Evet Geçici tabloları kullanabilirim, ancak sütun listesi oldukça uzun ve değişebilir, bu yüzden hepsinin tanımını yazmak yerine sadece ilgilendiğim sütunları belirtmeyi tercih ederim. ve gereksiz sütunlar her değiştiğinde bunları güncellemeyi unutmayın.
Rachel

@jcolebrand Şu anda umut verici görünmese de, excel sürücülerini denemeyi düşünmemiştim. Dosya uzantısı aslında .baknormal bir sınırlandırılmış dosya uzantısı değildir ve ilk denememde bana verdiği hata Could not find installable ISAM, bu yüzden bu işe yarayacağını sanmıyorum.
Rachel

2
Ben şahsen, böylece dinamik olarak oluşturulan geçici tablo ithalat için gerekli sütun sayısı yetişmeye çalışmak yerine (her zaman dosyanın ilk satırında bir countof sekmeleri yapmak) sütun listesinden anında sütun listesini ayrıştırmak istiyorsunuz . Bence, veriden mühendisleri tersine çevirebilecek şeyleri asla kodlamayın.
jcolebrand

Yanıtlar:


13

Açtığınız metin dosyasıyla aynı dizinde ayırıcıyı içeren bir schema.ini dosyası oluşturmanız gerekir. Dosya başına temelinde kayıt defteri değerlerini geçersiz kılmanın tek yolu budur. Üzerine dosya biçimi belgelerine bakın MSDN . Misal:

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

C: \ Text \ schema.ini içinde:

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

Bu etkinliğin sık sık tekrarlanması gerekiyorsa, schema.ini oluşturmak için bir komut dosyası öneririm. Aynı schema.ini dosyasında birden fazla dosyaya başvurulabilir veya kendi dizinindeki her metin dosyası için ayrı bir schema.ini dosyası eklenebilir.


Çok teşekkür ederim! Bir schema.ini dosyası kullanma ipuçları gördüm, ancak kendi başıma nasıl uygulanacağını bulmakta sorun yaşıyordum
Rachel

Bu eski bir yazı olduğunu biliyorum ama ben sadece "Nice Job" @dartonw demek zorunda kaldım.
Jeff Moden
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.