Joh*_*ley 34 sql sql-server bulkinsert
我试图将.csv文件插入到具有unix换行符的数据库中.我正在运行的命令是:
BULK INSERT table_name
FROM 'C:\file.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
Run Code Online (Sandbox Code Playgroud)
如果我将文件转换为Windows格式,则加载有效,但如果可以避免,我不想执行此额外步骤.有任何想法吗?
小智 98
我觉得有必要做出贡献,因为我遇到了同样的问题,我需要每天至少阅读几次来自SAP的2个UNIX文件.因此,我不需要使用unix2dos,而是需要更少的人工干预和更多自动编程.
如上所述,Char(10)在sql字符串中工作.我不想使用sql字符串,所以我使用''''+ Char(10)+'''',但由于某种原因,这不能编译.
工作非常光滑的是:(ROWTERMINATOR ='0x0a')
用Hex解决了问题!
希望这有助于某人.
Joh*_*ley 14
感谢所有回答的人,但我找到了我的首选解决方案.
当您告诉SQL Server ROWTERMINATOR ='\n'时,它将此解释为Windows下的默认行终止符,实际上是"\ r \n"(使用C/C++表示法).如果您的行终止符实际上只是"\n",则必须使用下面显示的动态SQL.
DECLARE @bulk_cmd varchar(1000)
SET @bulk_cmd = 'BULK INSERT table_name
FROM ''C:\file.csv''
WITH (FIELDTERMINATOR = '','', ROWTERMINATOR = '''+CHAR(10)+''')'
EXEC (@bulk_cmd)
Run Code Online (Sandbox Code Playgroud)
为什么你不能说BULK INSERT ...(ROWTERMINATOR = CHAR(10))超出我的范围.看起来您不能评估命令的WITH部分中的任何表达式.
上面做的是创建一个命令字符串并执行它.巧妙地回避了创建附加文件或执行额外步骤的需要.
小智 5
我确认语法
ROWTERMINATOR = '''+CHAR(10)+'''
Run Code Online (Sandbox Code Playgroud)
与 EXEC 命令一起使用时有效。
如果您有多个 ROWTERMINATOR 字符(例如管道和 unix 换行符),则语法为:
ROWTERMINATOR = '''+CHAR(124)+''+CHAR(10)+'''
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26796 次 |
最近记录: |