2013-07-18 11 views
5

Używam BULK INSERT, aby załadować plik tekstowy do SQL Server, który został utworzony z bazy danych SQL Anywhere. Plik tekstowy, który otrzymujemy, zawiera pola zawierające znaki tabulacji. Znajdują się w pliku tekstowym jako "\ x09".BULK INSERT plik rozdzielany tabulatorami - unescape x09

Czy serwer SQL może rozpoznać tę sekwencję specjalną?

Istnieje kilka wierszy, które mają wystarczającą liczbę tych sekwencji wyjątków, które powodują błąd obcinania, gdy wykonuję WSTAW BULKOWY. Raczej wolałbym, aby SQL Server wrócił do znaków tabulacji.


Update (7/26): Oto przykład dane plików

ID Name  Desc 
1  Value 1 Some text:\x09with tabs 
2  Value 2 More Text:\x09with more\x09tabs 

Tak więc, w tym przypadku, to ma 31 znaków, aby wyrazić wartość dla pola Desc dla rekordu z ID 2. Jednak należy go wprowadzić do bazy danych jako 25 znaków.

+0

można wyjaśnić, jeśli chcesz, bulk insert podzielić na kolumny poprzez zakładkę, lub jeśli ma to być jedna długa kolumna z zakładkami wewnątrz. –

+0

Sekwencję specjalną (\ x09) należy wstawić do pojedynczej kolumny db jako tabulatora. Zaktualizowałem pytanie przykładowymi danymi pliku – Dingels35

Odpowiedz

7

Zastosowanie tabeli temp:

IF OBJECT_ID('tempdb..#test1') IS NOT NULL 
DROP TABLE #test1; 
GO 

CREATE TABLE #test1 
    (
    ID integer NOT NULL, 
    Name varchar(30) NOT NULL, 
    [Desc] varchar(50) NOT NULL, 
    ) 


BULK 
INSERT #test1 
FROM 'd:\111.txt' 
WITH 
(
FIELDTERMINATOR = '\t', 
ROWTERMINATOR = '\n' 
); 

SELECT ID, Name, REPLACE([Desc], '\x09', ''), '\x09' AS Delimeter 
--INTO YourTable 
FROM #test1 
Powiązane problemy