【问题标题】:BULK INSERT tab-delimited file - unescape \x09批量插入制表符分隔文件 - 取消转义 \x09
【发布时间】:2013-07-18 03:00:24
【问题描述】:

我正在使用 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

因此,在此示例中,需要 31 个字符来表示 ID 为 2 的记录的 Desc 字段的值。但是,它应该以 25 个字符的形式插入到数据库中。

【问题讨论】:

  • 您能否澄清一下您是否希望批量插入通过制表符拆分成列,或者您是否希望它是一个带有制表符的长列。
  • 转义序列 (\x09) 应作为制表符插入到单个 db 列中。我用示例文件数据更新了问题

标签: sql-server tsql


【解决方案1】:

使用临时表:

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

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 2021-03-31
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2014-07-26
    相关资源
    最近更新 更多