使用bcp的一些问题
时间:2010-12-22 来源:那个傻瓜
xml和非xml的命令区别: -x
A. 为本机数据创建非 XML 格式化文件
bcp AdventureWorks2008R2.HumanResources.Department format nul -T -n -f Department-n.fmt
B. 为字符数据创建非 XML 格式化文件
bcp AdventureWorks2008R2.HumanResources.Department format nul -c -f Department-c.fmt -T
D. 为 Unicode 字符数据创建非 XML 格式化文件
bcp AdventureWorks2008R2.HumanResources.Department format nul -T -w -f Department-w.fmt
A. 为字符数据创建 XML 格式化文件
bcp AdventureWorks2008R2.HumanResources.Department format nul -c -x -f Department-c..xml –t, -T
B. 为本机数据创建 XML 格式化文件
bcp AdventureWorks2008R2.HumanResources.Department format nul -x -f Department-n..xml -n -T
跳过数据文件中的某些字段
(1)使用如下方法(先生成数据视图的方式)可以跳过数据文件中的某些字段:
insert student_bcpSELECT ID,age
FROM OPENROWSET(
BULK 'D:\student.txt',
formatfile = 'd:\student.xml' ) s
如上所示,可以使用生成的xml模板,通过openrowset只选择其中的2列(其实student.txt中有3列),然后进行输入。
此种方式也可以使用非xml的模板。
如果使用 XML 格式化文件,则当通过 bcp 命令或 BULK INSERT 语句直接向表导入时,无法跳过列。
(2)
使用非xml的模板,可以跳过表中的某些列,但是不能跳过数据文件中的列,就是说数据文件列顺序必须和模板文件列顺序一样。
原模板:
9.0
3
1 SQLCHAR 0 12 "\t" 1 ID ""
2 SQLCHAR 0 20 "\t" 2 name Chinese_PRC_CI_AS
3 SQLCHAR 0 5 "\r\n" 3 age ""
修改模板1:
修改后跳过中间列name,这样表中的name为空,好像没有很多用处。注意msdn里说第二列"\t"应该是"",但实验结果应该是"\t"才行
9.0
3
1 SQLCHAR 0 12 "\t" 1 ID ""
2 SQLCHAR 0 0 "\t" 0 name ""
3 SQLCHAR 0 5 "\r\n" 3 age ""
然后使用如下命令或者bcp,虽然student_bcp里有3列,但是只是输入了ID和age列,name列为空。
BULK INSERT student_bcp
FROM 'd:\student.txt'
WITH (FORMATFILE = 'd:\student1.fmt');
GO
修改模板2:直接将数据文件中的第二列映射到表中的第3列(表中第三列为name),第3列映射到表中第四列。
9.0
3
1 SQLCHAR 0 12 "\t" 1 ID ""
2 SQLCHAR 0 20 "\t" 3 name Chinese_PRC_CI_AS
3 SQLCHAR 0 5 "\r\n" 4 age ""
可以使用bcp, bulk insert 或者openrowset来进行数据的导入。
一个错误
xp_cmdshell'bcp Hot.dbo.student format nul -f d:\student.fmt -c -Ssss\aaaa -Uxxx -Pxxxx'
无法生成文件。
发生以下错误:
[Error][Microsoft][Native]Error = [Microsoft][SQL Native Client]无法打开 BCP 主数据文件
使用如下命令:
EXEC xp_cmdshell 'ECHO %USERDOMAIN%\%USERNAME%'
返回 :NT AUTHORITY\NETWORK SERVICE
然后在配置管理器(configuration manager)里面的SQL server2005服务里打开,看到登陆内置账号为Network service,
改成local system问题解决。 不知道还有没有其他办法?