2013-07-18 31 views
5

Tôi đang sử dụng BULK INSERT để tải một tệp văn bản vào SQL Server được tạo từ cơ sở dữ liệu SQL Anywhere. Tệp văn bản mà chúng tôi đang nhận có các trường chứa ký tự tab. Họ đang ở trong tập tin văn bản thoát như "\ x09".BULK INSERT tab-delimited tập tin - unescape x09

Tôi có thể lấy SQL Server để nhận biết chuỗi thoát này không?

Có một số hàng có đủ các trình tự thoát này mà chúng đang gây ra lỗi khi cắt BULK INSERT. Tôi muốn thay vì có SQL Server biến chúng trở lại vào các ký tự tab.


Cập nhật (7/26): đây là một ví dụ dữ liệu tập tin

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

Vì vậy, trong ví dụ này, phải mất 31 ký tự để thể hiện giá trị cho trường quyết định cho các hồ sơ với ID 2. Tuy nhiên, nó sẽ được chèn vào cơ sở dữ liệu dưới dạng 25 ký tự.

+0

Bạn có thể làm rõ nếu bạn muốn chèn số lượng lớn để phân chia thành các cột thông qua tab, hoặc nếu bạn muốn nó trở thành một cột dài với các tab bên trong. –

+0

Trình tự thoát (\ x09) phải được chèn vào một cột db duy nhất làm ký tự tab. Tôi đã cập nhật câu hỏi bằng dữ liệu tệp ví dụ – Dingels35

Trả lời

7

Sử dụng bảng 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