欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL Server Bulk Insert 只需要部分字段时的方法

程序员文章站 2023-12-15 12:57:52
根据一般做法的话,导出部分字段时没有办法生成格式化xml文件,所以导入时就没有办法格式化导入数据。 我想到两点,1.手工修改格式化xml文件,2.创造一个能生成格式化xml...
根据一般做法的话,导出部分字段时没有办法生成格式化xml文件,所以导入时就没有办法格式化导入数据。

我想到两点,1.手工修改格式化xml文件,2.创造一个能生成格式化xml文件的中间对象。

在msdn中寻找方法时,突然想到可以使用视图来做中间对象,于是就搭一个测试下。以下是测试记录:

复制代码 代码如下:

use master
go
create database [db_test]
go
use db_test
go
create table dbo.t_test(
id [int] identity(1,1) not null,
code varchar(10) ,
name varchar(100) ,
memo nvarchar(500) ,
memo2 ntext ,
primary key (id)
)
go
--上面创建的表是源数据表,下面创建是要导入数据的表,只有源表的三个字段
select code, name,memo into dbo.t_test2 from dbo.t_test where 1=2

--需求就是把表t_test中的code,name导入到t_test2。
--接下来,就是生成导入目标表的格式化xml文件,可是msdn上说只能生成某个对象的格式化xml文件。
--只好建立一个中间对象来达到目的,这里我创建的是一个视图。
--视图只包含需要导入的字段
create view v_test
as
select code,name from dbo.t_test2
--然后就是bcp操作
exec sp_configure 'show advanced options', 1;
reconfigure;
exec sp_configure 'xp_cmdshell', 1;
exec sp_configure 'show advanced options', 0;
reconfigure;
go
exec master..xp_cmdshell 'bcp db_test.dbo.v_test format nul -f c:/v_test_fmt.xml -x -c -t -s mypc\mydb'
go
exec master..xp_cmdshell 'bcp "select code, name from db_test.dbo.t_test" queryout c:/t_test.data -f c:/v_test_fmt.xml -t -s mypc\mydb'
go

--格式化文件和数据文件都有了,就成了.
bulk insert db_mgr.dbo.v_t1
from n'c:/t_test.data'
with
(
formatfile = n'c:/v_test_fmt.xml'
)
go
exec sp_configure 'show advanced options', 1;
reconfigure;
exec sp_configure 'xp_cmdshell', 0;
exec sp_configure 'show advanced options', 0;
reconfigure;
go
drop database db_test
go

环境是sql2005。

上一篇:

下一篇: