Ist es möglich, eine tabulatorgetrennte Datei in Sql Server Management Studio abzufragen, um ihre Daten anzuzeigen, ohne sie irgendwo zu speichern?
Ich weiß, dass Sie BULK INSERT
aus einer durch Tabulatoren getrennten Datei Folgendes verwenden können:
BULK INSERT SomeTable
FROM 'MyFile.txt'
WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n');
Dazu müssen Sie jedoch die Spalten im Voraus kennen und eine Tabelle für die Daten erstellen.
Ich weiß auch, dass Sie einige andere Dateitypen wie CSV oder Excel abfragen können, ohne zuvor die Spalten mit OPENROWSET
und die Excel-Treiber zu definieren, z.
-- 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$]')
Wenn ich auf dem SQL Server den Registrierungsschlüssel Format
unter HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Text
von CSVDelimited
in ändere TabDelimited
, liest die obige CSV-Abfrage eine durch Tabulatoren getrennte Textdatei korrekt, eine durch Kommas getrennte Textdatei wird jedoch nicht mehr gelesen, sodass ich nicht glaube, dass ich das möchte es so zu lassen.
Der Versuch, Format=TabDelimited
in der zu verwenden, OPENROWSET
funktioniert auch nicht
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Text;Database=\\Server\Folder\;HDR=Yes;Format=TabDelimited',
'SELECT * FROM MyFile.txt')
Ich habe einige Versuche unternommen, die Text
Registrierungsschlüssel von den Schlüsseln Engines
und ISAM Formats
in einen benutzerdefinierten TabDelimited
Ordner zu kopieren, der standardmäßig verwendet wird. Es werden jedoch weiterhin Dateien mit CSVFormat
anstelle des TabDelimited
Formats gelesen, sodass hier etwas fehlen muss.
Gibt es eine Möglichkeit, eine tabulatorgetrennte Datei abzufragen, um ihren Inhalt anzuzeigen, ohne eine Tabelle erstellen zu müssen BULK INSERT
?
Ich verwende SQL Server 2005
quelle
.bak
keine normal begrenzte Dateierweiterung, und der Fehler, den ich beim ersten Versuch erhalten habe, istCould not find installable ISAM
, also denke ich nicht, dass dies funktionieren wird.Antworten:
Sie müssen eine schema.ini-Datei erstellen, die das Trennzeichen in demselben Verzeichnis enthält wie die zu öffnende Textdatei. Dies ist die einzige Möglichkeit, die Registrierungswerte auf Dateibasis zu überschreiben. Weitere Informationen finden Sie in der Dokumentation zum Dateiformat auf MSDN . Beispiel:
In C: \ Text \ schema.ini:
Wenn diese Aktivität häufig wiederholt werden muss, würde ich ein Skript zum Erstellen der schema.ini vorschlagen. Auf mehrere Dateien kann in derselben schema.ini verwiesen werden, oder es kann eine separate schema.ini in jeder Textdatei in einem eigenen Verzeichnis enthalten sein.
quelle