2

我不敢相信这在某处没有得到解答,但我搜索了 MSDN、Stack Exchange 和 Google。我开始怀疑我想这样做是不可能的。

有没有人知道使用 SQL-server 在查询中执行此操作的方法(不使用其他工具,我已经看到使用 SSIS 的答案)?

假设我有一个 CSV 文件,其中包含由 SOH (StartOfHeader, char(1)) 和 \n als 行终止符终止的字段。我以为我可以使用 BULK INSERT 导入它,例如:

BULK INSERT Fubar
[dbo].[Persovorlage_DE]FROM 'c:\temp\foo.bar'
WITH
(
    FIRSTROW = 2,
    FIELDTERMINATOR = char(1),
    ROWTERMINATOR = '\n',
    TABLOCK,
    CODEPAGE = '1252'
)

这样做可以,除了不接受 char(1) 。

有没有办法将 FIELDTERMINATOR 设置为 char(1)?

后记1:

JeroenMostert 在评论中建议使用 select char(1),并将其复制粘贴在 FIELDTERMINATOR 的单引号之间,这是不可见但有效的。

后记2:

HoneyBadger 建议使用 0x01,这似乎也有效:

BULK INSERT Fubar FROM 'c:\temp\Foo.bar'
WITH
(
    FIRSTROW = 2,
    FIELDTERMINATOR = '0x01',
    ROWTERMINATOR = '\n',
    TABLOCK,
    CODEPAGE = '1252'
)

把它放在一个答案中,我会接受它

4

1 回答 1

2

虽然文档没有提及(甚至主动否认),但您可以使用十六进制值来指定特定字符。如:

BULK INSERT Fubar FROM 'c:\temp\Foo.bar'
WITH
(
    FIRSTROW = 2,
    FIELDTERMINATOR = '0x01',
    ROWTERMINATOR = '\n',
    TABLOCK,
    CODEPAGE = '1252'
)

同样,如果你有一个 \n 终止符,你可以使用0x0a. 如果你不这样做,\n 将自动以 \r 为前缀(尽管我记不起它在什么情况下会这样做),并且你的终结符将不会被识别。

于 2018-02-13T11:06:01.237 回答