Чтение текстового файла с SQL Server - PullRequest
31 голосов
/ 05 января 2010

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

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

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

Ответы [ 5 ]

40 голосов
/ 20 октября 2011

Только что открыл это:

SELECT * FROM OPENROWSET(BULK N'<PATH_TO_FILE>', SINGLE_CLOB) AS Contents

Он извлечет содержимое файла как varchar (max). Заменить SINGLE_CLOB на:

SINGLE_NCLOB для nvarchar (макс.) SINGLE_BLOB для varbinary (max)

Спасибо http://www.mssqltips.com/sqlservertip/1643/using-openrowset-to-read-large-files-into-sql-server/ за это!

39 голосов
/ 05 января 2010

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

Вам нужно проверить оператор 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'
      )

В моей тестовой среде все работает нормально: -)

0 голосов
/ 13 июля 2016
BULK INSERT dbo.temp 

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

WITH 

  (
     ROWTERMINATOR ='\n'
  )

это работает для меня, но сохранить как editplus для ANSI кодирования для мультиязычного

0 голосов
/ 16 декабря 2014

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

0 голосов
/ 05 января 2010

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

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

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

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

...