我正在尝试从SQL Server导出一个表,该表由一个ID和一个存储为nvarchar(max)的非常长的XML字符串组成。
SQL Table -- CREATE TABLE MyStuff (MyID int, MyText nvarchar(max))
Oracle Table -- CREATE TABLE MyStuffImported (MyID int, MyText NCLOB)
我正在使用SQL Server BCP实用工具导出到一个文本文件(mystuf.bcp),然后通过SQL加载程序导入到Oracle中。但SQL加载程序失败,并显示以下消息:
“数据文件(mystuf.bcp)中的物理记录长于最大值(1048576)”
0条记录被导入。
我不知道确切的问题是什么。最明显的可能性是mytext的长度超过了最大值1048576,实际上有些记录是,但不是全部,所以为什么至少有些记录没有被导入?有办法绕过这个限制吗?
另一种可能是我在一些讨论板上读到的,在我的文本中有一些Oracle无法处理的换行符。我希望我已经解决了这个问题:(1)从SQL中导出时删除\r和\n;(2)在SQL加载器控制文件的记录分隔符中使用\n(有关完整文件,请参见下面)。我是否做了不正确的事情,或者没有处理所有的案件?
这是我的SQL加载器控制文件的文本。请注意,我使用\作为分隔符,这看起来很奇怪,但它是mytext字段中唯一没有使用的字符。所以你会看到
\\
我的意思是\因为我在逃避它。
LOAD DATA
INFILE "MyStuff.bcp" "str '\\\n'"
APPEND INTO TABLE MyStuffImported
(
MyID INTEGER EXTERNAL TERMINATED BY "\\",
MyText CHAR TERMINATED BY "\\"
)
有什么建议吗?也许有更好的方法通过SQL加载器导入到NCLOB中?