Лучший способ запросить CSV или Excel файл через SQL 2008 R2 SSMS 64 бит? - PullRequest
2 голосов
/ 03 ноября 2011

Привет всем, у меня есть несколько сертификатов в SQL 2008, но я ни в коем случае не мастер. Мне было любопытно, если бы моей целью было сделать запрос файла CSV или Excel на моем рабочем столе в SSMS, как это сделать? До того, как кто-нибудь упомянул Openrowset и включил его через sp_configure, я пробовал это, и он, кажется, не работает при попытке драйвера «Microsoft.Jet.OLEDB.4.0», драйверов «MSADSAL» или других его итераций. Это дает некоторую ошибку о том, что серверу не разрешено быть нулевым ИЛИ иначе, что он может работать только в однопоточном режиме. Я читал об этом, и многие люди утверждают, что вам нужно запустить 32-битную версию или аналогичную, чтобы получить ее. Что меня смущает, так это то, что я могу использовать метод «BULK» с Openrowset, а затем выбрать «Single_Clob», однако я получаю строку с разделителями-запятыми, которую мне потом придется анализировать.

В чем заключается мой настоящий вопрос: есть ли простой способ быстрого запроса файла CSV или Excel в 64-разрядной версии SSMS 2008 R2?

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Jet драйвер только 32-битный режим.Смотрите этот MSDN блог .Можете ли вы использовать SQL CLR ?

Обычно мы используем пакеты служб SSIS для импорта данных CSV / XLS в таблицу для запросов - аналогично тому, что SSMS сделает для вас автоматически, если щелкнуть правой кнопкой мыши ивыберите импорт.

Проблема, с которой вы столкнулись, заключается в том, что Excel и CSV не являются базами данных.Чтобы запросить их, вы должны получить их в СУБД.

0 голосов
/ 08 декабря 2011

Разобрался:

Подход A: bcp:

  1. Убедитесь, что xp_cmdshell включен.(Если вы работаете в производственной среде для корпоративной компании, это НЕ МОЖЕТ быть вариантом по соображениям безопасности. Вы всегда можете использовать среду BETA или QA, чтобы поместить данные в первую очередь и, надеюсь, настроить связанные серверы).

    exec sp_configure 'xp_cmdshell', 1 перенастроить

  2. Создать CSV-файл для целей тестирования.Я сделал файл с тремя столбцами в формате CSV следующим образом:

A, Бретт, 1 B, Джон, 2 C, Брайан, 3

  1. Создайте временную или постоянную таблицу, соответствующую типам данных, показанным здесь:

    создать таблицу Test (значение varchar (3), имя varchar (16), ID int)

  2. Запустите bcp из командной оболочки, чтобы убедиться, что у вас нет открытого файла.

    EXEC xp_cmdshell 'bcp Test..Тест в "C: \ test \ Test.txt" -c -t, -r \ n -T 'GO

, если вам интересны коммутаторы с bcp, используйте файл справки: EXEC xp_cmdshell' bcp /? '!Для меня этот метод работал в SQL 2005 и FAIL в SQL 2008 и 2008 R2 с этим исключением: ошибка = [Microsoft] [собственный клиент SQL] В файле данных BCP обнаружен непредвиденный EOF.Я посмотрел, посмотрел и посмотрел, но кажется, что мой файл в стандартном формате UTF со стандартным разделителем запятых и стандартным переводом строки \ n SQL bcp не нравится.Однако мое следующее решение сработало сразу.

Подход B: Массовая вставка:

  1. Выполните шаги 2 и 3 выше того же

  2. Выполнить массовую вставку следующим образом:

    ОБЪЕМНАЯ ВСТАВКА dbo.Test ИЗ 'C: \ test \ Test.csv' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\ n')

Пока ваши типы данных таблицы соответствуют импорту, все будет в порядке.Чрезвычайно простое создание таблицы и трехстрочный оператор для меня довольно быстр по сравнению с необходимостью постоянного запуска мастера или открытия Business Intelligence Development Studio, после чего я мог бы просто написать собственное приложение на C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...