提前感谢您的帮助。
我正在尝试将平面文件导入我的SQL服务器数据库。我收到截断错误。我(我认为)的问题是文件的最后一个字段是一个自由格式文本字段,它似乎允许在字段内回车。所以我最终将{CR} {LF}作为行终结符,但有时{CR} {LF}实际上只是最后一个字段中自由格式文本中的新行。
有没有人知道如何加载这些数据?谢谢你的帮助。
这是我的代码:
DROP TABLE #SHELL
CREATE TABLE #SHELL
(
Field1 varchar(50)
,Field2 varchar(50)
,Field3 varchar(50)
,Field4 varchar(50)
,Field5 varchar(50)
,Field6 varchar(160)
,Field7 varchar(50)
,Field8 varchar(50)
,COMMENTS nvarchar(MAX)
)
BULK INSERT #SHELL
FROM
'[thefilepath].txt'
WITH
(
FIRSTROW = 1,
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
)
这是在Notepad ++中查看的表格图片,因此您可以看到回车符和换行符。
答案 0 :(得分:1)
您的图片没有通过,但是当导出或文件来自LINUX系统时,您通常需要使用HEX。试试这个:
WITH (FIELDTERMINATOR = '\t',FIRSTROW=1,ROWTERMINATOR = '0x0a')
答案 1 :(得分:1)
如果您想对此进行审议,我会预处理文本文件以删除那些“中间字段”行终止符,或者,如果它们很重要,则替换另一个转义字符。
例如,创建一个脚本,该脚本接收文件中的每一行并尝试将其拆分到列分隔符上,并比较您获取的令牌数 - 以确定一行是否真的是包含所有预期列的完整行。
对于任何比预期更少的标记行,将它与前一行合并,可选择将转义字符插入最后一列。
将结果写入新文件,因此每条DB记录都是一行。
导入后,可以选择使用update语句将行终止符放回最后一个字段。例如,如果你用一个|代替它们然后更新以替换|在SQL中使用\ n。
示例:文件中的“记录”可能是:
value value1 value2 some long text
wraps to another line and
yet another line
value value1 value2 a better behaved record on one line
这是两条记录,但有四条线。在预处理文件时,请将其设为:
value value1 value2 some long text|wraps to another line and|yet another line
value value1 value2 a better behaved record on one line
然后记录实际上是文件中每行一个,每个CRLF是一行的结尾和记录的结尾。批量导入有效,但最后一列的值为
some long text|wraps to another line and|yet another line
执行更新替换|通过SQL中的CRLF返回到文件中的内容的准确表示
答案 2 :(得分:0)
单独批量插入无法真正解决这个问题。所以,有两种选择: