Czyste zgadywanie:
- Plik to
utf-8encoded (lub jakiekolwiek inne kodowanie, SQL-Server 2008 nie może czytać natywnie).- Musisz wiedzieć, że SQL-Server jest dość ograniczony w kodowaniu plików.
CHAR(lubVARCHAR) jestextended ASCII 1-byte encodingiNCHAR(lubNVARCHAR) toUCS-2 2-byte encoding(który jest prawie identyczny zUTF-16). - W SQL-Server 2016 (i SP2 dla v2014) wprowadzono dodatkowe wsparcie, szczególnie dla
utf-8. - Spróbuj otworzyć plik XML za pomocą odpowiedniego edytora (np. notepad++) i spróbuj znaleźć kodowanie pliku. Spróbuj zapisać to jako „unicode / UCS-2 / utf-16” i ponów import.
- Spróbuj użyć importu z
CLOBzamiastBLOB. Odczytywanie pliku jako binarnego LargeObject zajmie bajty jeden po drugim. SQL-Server spróbuje odczytać te bajty jako ciąg ze stałym rozmiarem na znak. znak LOB może działać w szczególnych okolicznościach. - Sprawdź pierwsze dwa bajty dla
BOM(znak kolejności bajtów)
- Musisz wiedzieć, że SQL-Server jest dość ograniczony w kodowaniu plików.
- Jest trochę brudu w Twoim XML
- Otwórz plik za pomocą edytora HEX i spróbuj znaleźć dziwne kody
- Twój kod przetwarza zawartość pliku w ramach dynamicznie tworzonej instrukcji.
- W takich przypadkach czasami natrafiasz na obcinanie lub cudzysłowy rozdzielające ciąg
- Ogólna wskazówka:
- Jeśli importujesz dane i spodziewasz się problemów, zdecydowanie zalecamy skorzystanie z podejścia dwuetapowego
- Odczytaj plik do tolerancyjnej tabeli pomostowej (z
NVARCHAR(MAX)lub nawetVARBIANRY(MAX)kolumny docelowe) i spróbuj kontynuować. - Może być konieczne użycie innego narzędzia do zmiany pliku przed importem.