我正在使用BULK INSERT将文本文件加载到从SQL Anywhere数据库创建的SQL Server中。我们收到的文本文件包含包含制表符的字段。它们在文本文件中转义为“\ x09”。
我可以让SQL Server识别这个转义序列吗?
有些行具有足够的这些转义序列,当我执行BULK INSERT时它们会导致截断错误。我宁愿让SQL Server将它们重新设置为制表符。
更新(7/26):这是示例文件数据
ID Name Desc
1 Value 1 Some text:\x09with tabs
2 Value 2 More Text:\x09with more\x09tabs
因此,在此示例中,表示ID为2的记录的Desc字段的值需要31个字符。但是,它应该以25个字符的形式插入到数据库中。
答案 0 :(得分:12)
使用临时表:
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