Чи можна запитувати файл із обмеженими вкладками від SSMS?


14

Чи можна запитувати файл з обмеженими вкладками від 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


Чи прийнятно використовувати динамічно створену темп-таблицю, яка змивається після використання?
jcolebrand

Друге питання: чи намагалися ви використовувати драйвери Excel просто відкрити TDF? Іноді Excel магічний.
jcolebrand

@jcolebrand Так, я можу використовувати тимчасові таблиці, проте список стовпців досить довгий і може змінюватися, тому я набагато краще зможу вказати лише ті колонки, які мене цікавлять, а не потрібно виписувати визначення для всіх , і пам'ятаючи оновлювати їх будь-коли непотрібні стовпці змінюватимуться.
Рейчел

@jcolebrand Я не думав спробувати драйвери Excel, хоча зараз це не виглядає перспективно. Розширення файлу насправді .bakне є нормальним розширеним розширенням файлу, і помилка, яку він мені дав при першій спробі, є Could not find installable ISAM, тому я не думаю, що це буде працювати.
Рейчел

2
Я б особисто аналізував список стовпців під час руху з файлу кожного разу (просто робимо вкладки countof у першому рядку файлу), а не намагатися не відставати від кількості стовпців, необхідних для імпорту, таким чином, динамічно створена тимчасова таблиця . На мою думку, ніколи не важко кодуйте те, що ви можете повернути інженеру з даних.
jcolebrand

Відповіді:


13

Ви повинні створити файл schema.ini, що містить роздільник у тому ж каталозі, що і текстовий файл, який ви відкриваєте. Це єдиний спосіб переосмислити значення реєстру на основі файлу. Дивіться документацію щодо формату файлів на MSDN . Приклад:

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

В C: \ Text \ schema.ini:

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

Якщо цю діяльність потрібно часто повторювати, я б запропонував сценарій для створення schema.ini. На один і той же schema.ini можна посилатися декілька файлів або окремий schema.ini може бути включений до кожного текстового файлу у власному каталозі.


Велике спасибі! Я бачив підказки щодо використання файлу schema.ini, однак у мене виникли проблеми з розумінням, як реалізувати його самостійно
Рейчел

Я знаю, що це старий пост, але мені просто довелося сказати "Приємна робота" @dartonw.
Джефф Моден
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.