Подтвердить что ты не робот

Чтение текстового файла с помощью SQL Server

Я пытаюсь читать текстовый файл из SQL-запроса (SQL Server 2005), но мне вообще не повезло. Я пробовал разные вещи с EXEC и xp_cmdshell, но все они не работают. Это общий способ, которым я пытался приблизиться к этому:

CREATE TABLE temp (data varchar(2000));
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt';

Затем я пытаюсь выбрать данные из таблицы temp. Я много искал, и я не могу сказать, что я ошибаюсь. Помощь?

4b9b3361

Ответ 1

Как выглядит ваш текстовый файл? Каждая строка содержит запись?

Вам нужно проверить BULK INSERT - это должно выглядеть примерно так:

BULK INSERT dbo.YourTableName
FROM 'D:\directory\YourFileName.csv'
WITH
(
  CODEPAGE = '1252',
  FIELDTERMINATOR = ';',
  CHECK_CONSTRAINTS
) 

Здесь, в моем случае, я импортирую CSV файл, но вы также можете импортировать текстовый файл.

Из документов MSDN - здесь образец, который, надеюсь, работает для текстового файла с одним полем в строке:

BULK INSERT dbo.temp 
   FROM 'c:\temp\file.txt'
   WITH 
      (
         ROWTERMINATOR ='\n'
      )

Кажется, что в моей тестовой среде очень хорошо работает: -)

Ответ 3

Вам нужно сделать это один раз или как часть нормальной работы базы данных (т.е. в ответ на триггер, запланированное событие и т.д.)?

В любом случае вам лучше создать пакет SSIS.

  • В SQL Management Studio щелкните правой кнопкой мыши базу данных.
  • Выберите задачи | Импорт данных...
  • Следуйте инструкциям мастера. Выберите "плоский текстовый файл" в качестве поставщика при появлении запроса.

Я не использовал dbo.xp_cmdshell (по вашему примеру), но я думаю, что проблема с выпуском является проблемой.

Ответ 4

если вы хотите прочитать файл в таблицу за один раз, вы должны использовать BULK INSERT. С другой стороны, если вы предпочитаете анализировать файл по строкам, чтобы сделать свои собственные проверки, вы должны взглянуть на эту сеть: https://www.simple-talk.com/sql/t-sql-programming/reading-and-writing-files-in-sql-server-using-t-sql/ Возможно, вам необходимо активировать xp_cmdshell или другие функции OLE Automation. Появятся простые Google и script. Надеюсь быть полезным.

Ответ 5

BULK INSERT dbo.temp 

FROM 'c:\temp\file.txt' --- path file in db server 

WITH 

  (
     ROWTERMINATOR ='\n'
  )

он работает для меня, но сохраняет, как editplus, для ansi-кодирования для многоязычного