Не бих предложил този отговор, освен че работихте толкова усилено, за да го документирате и той беше гласуван в подкрепа без отговор след месец. И така, ето го. Единственият ви избор изглежда е да промените данните или инструмента.
Когато инструментът е счупен и продавачът не го интересува, е грешка да продължавате да опитвате. Време е за смяна. Полагате много усилия, за да проучите как точно е повреден и да демонстрирате, че нарушава не само RFC, но и предишната версия на инструмента. Колко повече доказателства ви трябват?
CSV също е котва за лодка. Ако имате възможност, по-добре е да използвате обикновен файлов формат с разделители. За много приложения разделянето с разделители е добро. Най-добрият разделител IMO е '\', тъй като този знак няма място в текста на английски. (От друга страна, няма да работи за данни, съдържащи имена на пътища на Windows.)
CSV има два проблема като формат за обмен. Първо, не всичко е толкова стандартно; различните приложения разпознават различни версии, каквото и да се казва в RFC. Второ (и свързано) е, че той не представлява обикновен език в термините на CS, поради което не може да бъде анализиран като регулярен израз. Сравнете с ^([^\t]*\t)*[\t]*$
за линия, разделена с разделители. Практическото значение на сложността на дефиницията на CSV е (вижте по-горе) относителният недостиг на инструменти за справяне с тях и тенденцията им да бъдат несъвместими, особено през малките часове.
Ако заредите CSV и DTS, имате добри опции, една от които е bcp.exe
. Той е много бърз и безопасен, защото Microsoft не се е изкушавал да го актуализира от години. Не знам много за DTS, но в случай, че трябва да го използвате за автоматизация, IIRC има начин да извикате външни помощни програми. Внимавайте обаче с този bcp.exe
не връща надеждно състояние на грешка в обвивката.
Ако сте решени да използвате DTS и да се придържате към CSV, тогава най-добрата ви оставаща опция е да напишете изглед, който подготвя данните по подходящ начин за него. Ако се върна в този ъгъл, бих създал схема, наречена, да речем, „DTS2012CSV“, така че да мога да напиша select * from DTS2012CSV.tablename
, давайки шанс на всеки, който го е грижа, да го разбере (защото ще го документирате, нали в коментари в текста за преглед?). Ако е необходимо, други могат да копират неговата техника за други счупени екстракти.
HTH.