Можно ли запросить файл с разделителями табуляции в Sql Server Management Studio, чтобы просмотреть его данные, не сохраняя их где-либо?
Я знаю, что вы можете BULK INSERT
из файла с разделителями табуляции, используя что-то вроде:
BULK INSERT SomeTable
FROM 'MyFile.txt'
WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n');
однако для этого необходимо заранее знать столбцы и создать таблицу для хранения данных.
Я также знаю, что вы можете запрашивать некоторые другие типы файлов, такие как CSV или Excel, не определяя столбцы заранее, используя OPENROWSET
драйверы 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$]')
Кроме того , если я изменить ключ реестра Format
под HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Text
от CSVDelimited
к TabDelimited
на SQL Server, запрос CSV выше будет правильно читать табуляцией текстовый файл, однако он больше не будет читать разделенный запятыми текстовый файл , так что я не думаю , что я хочу оставить это так.
Попытка использовать Format=TabDelimited
в OPENROWSET
тоже не работает
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
источник
.bak
не является обычным расширением с разделителями, и ошибка, которую он дал мне при первой попыткеCould not find installable ISAM
, не думаю, что это сработает.Ответы:
Вы должны создать файл schema.ini, содержащий разделитель в том же каталоге, что и открываемый текстовый файл. Это единственный способ переопределить значения реестра для каждого файла. См. Документацию формата файла на MSDN . Пример:
В C: \ Text \ schema.ini:
Если это действие нужно повторять часто, я бы предложил сценарий для создания schema.ini. Несколько файлов могут ссылаться в одном и том же schema.ini, или отдельный schema.ini может быть включен в каждый текстовый файл в своем собственном каталоге.
источник