2011-07-07 13 views
8

Mam plik CSV, który próbuję zaimportować do SQL za pomocą pakietów SSIS za pośrednictwem kodu. linia może wyglądać jak tenCzy istnieje sposób na uniknięcie podwójnego cudzysłowu w ciągu kwalifikowanego tekstu na imporcie CIS SSIS?

321,1234,"SOME MACHINE, MACHINE ACCESSORIES 1 1/2"" - 4""" 

W tym przykładzie są one za pomocą podwójny cudzysłów symbolizować cali. Próbują uciec od podwójnego cudzysłowu podwójną kwotą. SSIS jednak nie szanuje tego eskapizmu i zawodzi.

Czy mimo to mogę nadal używać podwójnego cudzysłowu na cal i uciekać w cytowanym tekście?

Wiele sugestii ma zastąpić podwójny cudzysłów dwoma pojedynczymi cudzysłowami. Czy to jedyna praca, czy mogę użyć innej techniki ucieczki?

Widziałem ludzi, którzy mówią o użyciu transformacji kolumny pochodnej, ale w moim przypadku SSIS kończy się niepowodzeniem w kroku Źródło pliku płaskiego, a zatem nie mogę przejść do etapu transformacji kolumn pochodnych.

Obecnie uruchamiam zadanie skryptu w strumieniu sterowania, tuż przed przepływem danych, aby manipulować plikiem CSV z niektórymi wyrażeń regularnych służących do czyszczenia danych.

Potrzebuję, aby ciąg był kwalifikowany tekstowo z 2 zewnętrznymi podwójnymi cudzysłowami z powodu potencjalnych przecinków w kolumnie opisu.

Co mogę zrobić z podwójnymi cudzysłowami w ciągu tekstowym kwalifikowanym ciągiem?

+0

można uciec cytat za cali z backslash lub coś innego? Czy to jest poza kontrolą? – Brad

+0

Po prostu wydaje się, gdy SSIS widzi cytat, że oczekuje, aby inny towarzyszył mu.Tak jeśli istnieją trzy cytaty w tekście kwalifikowany ciąg, to bomby wi th Błąd "Nie znaleziono rozdziela kolumny". – topwik

Odpowiedz

4

Wow, spodziewałem się, że będę w stanie odpowiedzieć "Po prostu ustaw kwalifikator tekstu", ale pomyślałem, że już próbowałeś, więc spróbowałem zanim odpowiedziałem. Niespodzianka, SSIS nie obsługuje standardowych plików CSV!

Wygląda na to, że jest to common complaint. Istnieje jeden komentarz Microsoftu na temat próbek, które mogą pomóc; Here is the codeplex project, wspomnieli, że przykładowy plik źródłowy z prostym wyrażeniem regularnym oraz przykładowy plik źródłowy z oddzielnym czytnikiem plików mogą pomóc - przypuszczam, że bardziej czytelny będzie plik Czytnik plików.

1

Odpowiedź ta nie ma zastosowania do 2005 wymieniony tutaj, ale w przypadku, gdy ktoś przychodzi po drugiej stronie tego podczas poszukiwania i używa 2008, to inne pytanie wydaje się mieć odpowiedź robocza: SSIS 2008 and Undouble

-1

Prawdopodobnie stare dzieje teraz, ale ten problem został rozwiązany w SQL Server 2012. Byłem w stanie zaimportować ten sam plik na serwerze 2012, który nie powiódł się na moim serwerze z 2008 roku.

+1

Nie, nadal nie działa w 2017 (z SQL Server 2016 i VS2015) –

1

Wczoraj miałem podobny problem. Mamy plik csv, który używa przecinka (,) jako ogranicznika i podwójnego cudzysłowu (") jako kwalifikatora tekstu, ale istnieje pole zawierające podwójny cudzysłów w podwójnym cudzysłowie (nieumarły podwójny cudzysłów w ciągu znaków) Po spędzeniu pół dnia na wyszukiwaniu , wpadł na poniższym rozwiązaniu

var fileContent = File.ReadAllLines(fullFilePath); //load the file into a one dimensional string array. fullFilePath is the full path + the file name. var fileContentUpdated = fileContent.Select(x => new Regex(@"(?<!^)(?<!\,)""(?!\,)(?!$)").Replace(x, "'")).ToArray(); //this line here finds the double quote within the double quote and replace it with single quote File.WriteAllLines(fullFilePath, fileContentUpdated); //write the string array into the csv file.

nie widzę innej możliwości niż wymienić podwójny cudzysłów coś innego, aby uniknąć tego problemu.

Powiązane problemy