SQL 2005 получить данные из файла - PullRequest
4 голосов
/ 09 февраля 2011

У меня есть данные в простом текстовом файле, я пытаюсь запросить их (чтобы поместить в таблицу), но когда я использую

select *
from OPENROWSET('MSDASQL',
       'Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=C:\DB\;Extensions=TXT;',
       'select * from data.txt ');

Я получаю строки, но все они равны NULL, потому что (я думаю) терминатор поля отсутствует и находится в формате UTF-16LE, в TXT все поля известны по количеству символов, например:

FIELD1FIELD2FIELD3FIELD4FIELD5FIELD6
FIELD1FIELD2FIELD3FIELD4FIELD5FIELD6
FIELD1FIELD2FIELD3FIELD4FIELD5FIELD6
FIELD1FIELD2FIELD3FIELD4FIELD5FIELD6

Что еще хуже, файл находится в UTF-16LE , но он мне нужен в UTF-8 (или изменить формат в sql 2005), чтобы openrowset работал

И когда я использую

SELECT * FROM OPENROWSET ( BULK 'C:\DB\data.txt', SINGLE_NCLOB) AS BinFile  

Я получаю все данные, но в одной строке: (

Заранее спасибо

ps: также использовал sp_addlinkedserver и не работал

Ответы [ 3 ]

0 голосов
/ 09 февраля 2011

Убедитесь, что содержимое файла data.txt в правильном формате . Если он не отформатирован правильно, то значения NULL будут возвращены, когда его невозможно будет интерпретировать. Например, если файл данных выглядит следующим образом:

f1,f2,f3
1,x,3
a,b,c

Затем драйвер будет интерпретировать первое и третье поля как некое числовое значение, а затем вернет NULL для полей f1 и f3 во второй строке данных.

Редактировать Для данных данного примера убедитесь, что в вашем файле schema.ini есть что-то вроде следующего:

[data.txt]
Format=FixedLength
ColNameHeader=False
Col1=Field1 Text Width 6
Col2=Field2 Text Width 6
Col3=Field3 Text Width 6
Col4=Field4 Text Width 6
Col5=Field5 Text Width 6
Col6=Field6 Text Width 6
0 голосов
/ 17 февраля 2011

Спасибо, ребята, что потратили время и силы на то, чтобы попытаться решить эту проблему, наконец-то решили ее с помощью:

SELECT 
    SUBSTRING(F1, 1, 19) col 1
    ,SUBSTRING(F1, 20, 19) col 2
FROM OpenRowset(''Microsoft.Jet.OLEDB.4.0'',   
     ''Text;HDR=NO;CharacterSet=unicode;Database='+@path+';
     Extended Properties="Excel 8.0;HDR=Yes;IMEX=1" '',JOURNEY_PLAN#txt);

SUBSTRING , чтобы получить данные из файла, которыйничем не ограничен

CharacterSet = unicode , чтобы механизм БД мог читать из определенного набора символов файла

Спасибо !!!!!!!!!

ps: В http://msdn.microsoft.com/en-us/library/bb177651.aspx обнаружены подробности об атрибуте "CharacterSet", плохо то, что в руководстве для OPENROWSET dosent говорится об этом http://msdn.microsoft.com/en-us/library/ms190312.aspx> :(

0 голосов
/ 09 февраля 2011

Вы пытались использовать BULK INSERT для этого?

BULK INSERT dbo.myTable FROM 'C:\temp\MyFile.txt'
WITH (
FIELDTERMINATOR = ',')

Синтаксис массовой вставки MSDN

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