我不敢相信这个问题没有在某个地方得到解答,但我已经搜索了 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'
)
将其放入答案中,我会接受
最佳答案
虽然文档没有提及(甚至主动否认),但您可以使用十六进制值来指定特定字符。如:
BULK INSERT Fubar FROM 'c:\temp\Foo.bar'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = '0x01',
ROWTERMINATOR = '\n',
TABLOCK,
CODEPAGE = '1252'
)
同样,如果有\n 终止符,则可以使用 0x0a
。如果不这样做,\n 将自动以\r 为前缀(尽管我记不清在什么情况下会这样做),并且您的终止符将不会被识别。
关于sql-server - 在批量插入查询中使用不可打印的字符(\0\n\t 除外)作为字段终止符参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48763390/