我有一个数据文件,是从Oracle导出的,提取脚本是这样:select A||'|'||B||'|'||C
from X;我想把这个表的数据导入SQL SERVER,使用 BULK INSERT方法:bulk insert Y
from 'c:\data.log'
with
(
FIELDTERMINATOR='|',
ROWTERMINATOR='{LF}'
)但是总是报错,错误信息是,大容量加载失败。数据文件中第 1 行的第 3 列太长。请验证是否正确指定了字段终止符和行终止符。我用UE查看过数据文件,它换行符确实是 0A 啊,
究竟怎么办、
from X;我想把这个表的数据导入SQL SERVER,使用 BULK INSERT方法:bulk insert Y
from 'c:\data.log'
with
(
FIELDTERMINATOR='|',
ROWTERMINATOR='{LF}'
)但是总是报错,错误信息是,大容量加载失败。数据文件中第 1 行的第 3 列太长。请验证是否正确指定了字段终止符和行终止符。我用UE查看过数据文件,它换行符确实是 0A 啊,
究竟怎么办、
FROM 'c:\data.log'
WITH
(
FIELDTERMINATOR='|',
ROWTERMINATOR='\r\n',
DATAFILETYPE='char'
);TRY
大容量加载失败。数据文件中第 1 行的第 3 列太长。请验证是否正确指定了字段终止符和行终止符。
消息 7399,级别 16,状态 1,第 1 行
链接服务器 "(null)" 的 OLE DB 访问接口 "BULK" 报错。提供程序未给出有关错误的任何信息。
消息 7330,级别 16,状态 2,第 1 行
无法从链接服务器 "(null)" 的 OLE DB 访问接口"BULK"提取行。
FROM 'c:\data.log'
WITH
(
FIELDTERMINATOR='|',
ROWTERMINATOR='\n',
DATAFILETYPE='char'
);
任何单个字符
.
匹配除换行符外的所有单一字符。
零个或更多
*
匹配零或更多前导表达式的匹配项,执行所有可能的匹配。
一个或更多
+
匹配至少一个前导表达式的匹配项。
行首
^
仅匹配行首位置的字符串。
行尾
$
仅匹配行尾位置的字符串。
字首
<
仅匹配文本中以此开头的字。
字尾
>
仅匹配文本中以此结尾的字。
分行符
\n
匹配与平台无关的换行符。在替换表达式中,插入一个换行符。
在集合中的任何一个字符
[]
匹配 [] 中的任何一个字符。若要指定字符范围,请列出起始字符和结束字符,并用短划线 (-) 分隔,如 [a-z]。
不在集合中的任何一个字符
[^...]
匹配不在 ^ 之后的字符集中的任何一个字符。
或
|
匹配“或”符号 (|) 两旁的任一表达式。常用于组中。例如,(sponge|mud) bath 可以匹配“sponge bath”和“mud bath”。
转义
\
将反斜杠 (\) 后的字符作为文字匹配。此表达式允许您搜索正则表达式标记中使用的符号,如 { 和 ^。例如, \^ 可用于查找字符 ^。
标记表达式
{}
匹配用括起来的表达式内的文本。
C/C++ 标识符
:i
匹配表达式 ([a-zA-Z_$][a-zA-Z0-9_$]*)。
用引号括起来的字符串
:q
匹配表达式 (("[^"]*")|('[^']*'))。
空格或制表符
:b
匹配空格或制表符。
整数
:z
匹配表达式 ([0-9]+)。
beijing|sms|15912345678就像这样
FROM 'c:\data.log'
WITH
(
FIELDTERMINATOR='|',
ROWTERMINATOR='\n',
KEEPNULLS
);
from 'c:\data.log'
with
(FIELDTERMINATOR='|')
<?xml version="1.0"?>
<BCPFORMAT
xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="|"
MAX_LENGTH="10"/> -- 根据实际情况设置字段长度
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="|"
MAX_LENGTH="48"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\n"
MAX_LENGTH="48"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="A" xsi:type="SQLVARCHAR"/> -- 根据实际情况设置 SQL 类型
<COLUMN SOURCE="2" NAME="B" xsi:type="SQLVARCHAR"/>
<COLUMN SOURCE="3" NAME="C" xsi:type="SQLVARCHAR"/>
</ROW>
</BCPFORMAT>BULK INSERT Y
FROM 'c:\data.log'
with (FORMATFILE='c:\fmt.xml');
以下是在 SQL Server 2008 上进行的测试:
如果是 dos 格式,ROWTERMINATOR='\n' 可以成功导入,而 ROWTERMINATOR='\r\n'(这个应该是 dos 文本格式的行终结符) 不能成功导入。
如果是 unix 格式,ROWTERMINATOR='\n' (这个是 unix 文本格式的行终结符)不能成功导入。
如果使用格式化文件,则可以成功导入。