Чтение текстового файла с помощью 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. Я много искал, и я не могу сказать, что я ошибаюсь. Помощь?
Ответы
Ответ 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'
)
Кажется, что в моей тестовой среде очень хорошо работает: -)
Ответ 2
Только что открыл это:
SELECT * FROM OPENROWSET(BULK N'<PATH_TO_FILE>', SINGLE_CLOB) AS Contents
Он потянет содержимое файла как varchar (max). Замените SINGLE_CLOB
на:
SINGLE_NCLOB
для nvarchar (max)
SINGLE_BLOB
для varbinary (max)
Благодаря http://www.mssqltips.com/sqlservertip/1643/using-openrowset-to-read-large-files-into-sql-server/ для этого!
Ответ 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-кодирования для многоязычного