Czy możliwe jest zapytanie pliku rozdzielanego tabulatorami z Sql Server Management Studio, aby wyświetlić jego dane bez zapisywania go w dowolnym miejscu?
Wiem, że możesz BULK INSERT
użyć pliku rozdzielanego tabulatorami, używając czegoś takiego:
BULK INSERT SomeTable
FROM 'MyFile.txt'
WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n');
wymaga to jednak wcześniejszej znajomości kolumn i utworzenia tabeli do przechowywania danych.
Wiem również, że możesz przesyłać zapytania do niektórych innych typów plików, takich jak CSV lub Excel, bez wcześniejszego zdefiniowania kolumn OPENROWSET
i sterowników Excel, takich jak:
-- 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$]')
Ponadto, w przypadku zmiany klucza rejestru Format
pod HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Text
od CSVDelimited
celu TabDelimited
na serwerze SQL, zapytanie CSV powyżej będzie prawidłowo odczytać plik tekstowy tabulatorami, jednak nie będzie już odczytać plik tekstowy rozdzielany przecinkami więc nie sądzę, chcę tak to zostawić.
Próba użycia Format=TabDelimited
w OPENROWSET
nie działa również
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Text;Database=\\Server\Folder\;HDR=Yes;Format=TabDelimited',
'SELECT * FROM MyFile.txt')
Podjąłem kilka prób skopiowania Text
kluczy rejestru zarówno z kluczy, jak Engines
i ISAM Formats
do niestandardowych ustawień domyślnych TabDelimited
, jednak nadal odczytuje pliki CSVFormat
w TabDelimited
formacie zamiast formatu, więc tutaj czegoś mi brakuje.
Czy istnieje sposób zapytania o plik rozdzielany tabulatorami w celu wyświetlenia jego zawartości bez konieczności tworzenia tabeli i pliku BULK INSERT
?
Używam SQL Server 2005
źródło
.bak
zwykłym rozszerzeniem z ogranicznikami, a błąd, który podał mi przy pierwszej próbie, jestCould not find installable ISAM
taki, więc nie sądzę, aby to zadziałało.Odpowiedzi:
Musisz utworzyć plik schema.ini zawierający separator w tym samym katalogu, co otwierany plik tekstowy. Jest to jedyny sposób na zastąpienie wartości rejestru dla poszczególnych plików. Zobacz dokumentację formatu pliku na MSDN . Przykład:
W C: \ Text \ schema.ini:
Jeśli to działanie musi być często powtarzane, sugerowałbym skrypt do utworzenia schema.ini. Do wielu plików można odwoływać się w tym samym pliku schema.ini lub do każdego pliku tekstowego we własnym katalogu można dołączyć osobny plik schema.ini.
źródło