您的位置:首页 > 数据库

SQL语句导入导出大全

2009-06-15 14:27 567 查看
/******* 导出到excel

EXEC master..xp_cmdshell ’bcp SettleDB.dbo.shanghu out
c:/temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""’

/*********** 导入Excel

SELECT *

FROM OpenDataSource(
’Microsoft.Jet.OLEDB.4.0’,

’Data Source="c:/test.xls";User
ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions

SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+’ ’ 转换后的别名

FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,

’Data
Source="c:/test.xls";User ID=Admin;Password=;Extended properties=Excel
5.0’)...xactions

/** 导入文本文件


EXEC master..xp_cmdshell ’bcp "dbname..tablename" in
c:/DT.txt -c -Sservername -Usa -Ppassword’

/** 导出文本文件


EXEC master..xp_cmdshell ’bcp "dbname..tablename" out
c:/DT.txt -c -Sservername -Usa -Ppassword’



EXEC master..xp_cmdshell
’bcp "Select * from dbname..tablename" queryout c:/DT.txt -c -Sservername -Usa
-Ppassword’

导出到TXT文本,用逗号分开

exec master..xp_cmdshell ’bcp "库名..表名" out "d:/tt.txt" -c
-t ,-U sa -P password’

BULK INSERT 库名..表名

FROM ’c:/test.txt’

WITH (


FIELDTERMINATOR = ’;’,

ROWTERMINATOR = ’/n’

)

--/* dBase IV文件


select * from

OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’

,’dBase IV;HDR=NO;IMEX=2;DATABASE=C:/’,’select * from [客户资料4.dbf]’)

--*/

--/* dBase III文件


select * from

OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’

,’dBase III;HDR=NO;IMEX=2;DATABASE=C:/’,’select * from [客户资料3.dbf]’)

--*/

--/* FoxPro 数据库


select * from openrowset(’MSDASQL’,

’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:/’,

’select * from [aa.DBF]’)

--*/

/**************导入DBF文件
****************/

select * from openrowset(’MSDASQL’,

’Driver=Microsoft Visual FoxPro Driver;

SourceDB=e:/VFP98/data;

SourceType=DBF’,

’select * from customer where country != "USA" order by
country’)

go

/***************** 导出到DBF ***************/

如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句

insert into openrowset(’MSDASQL’,

’Driver=Microsoft Visual FoxPro
Driver;SourceType=DBF;SourceDB=c:/’,

’select * from [aa.DBF]’)

select *
from 表

说明:

SourceDB=c:/ 指定foxpro表所在的文件


aa.DBF 指定foxpro表的文件
名.



/*************导出到Access********************/

insert into
openrowset(’Microsoft.Jet.OLEDB.4.0’,

’x:/A.mdb’;’admin’;’’,A表) select *
from 数据库
名..B表

/*************导入Access********************/

insert into B表 selet * from
openrowset(’Microsoft.Jet.OLEDB.4.0’,

’x:/A.mdb’;’admin’;’’,A表)

********************* 导入 xml 文件


DECLARE @idoc int

DECLARE @doc varchar(1000)

--sample XML document

SET @doc =’

<root>

<Customer cid= "C1" name="Janine"
city="Issaquah">

<Order oid="O1" date="1/20/1996" amount="3.5"
/>

<Order oid="O2" date="4/30/1997" amount="13.4">Customer
was very satisfied

</Order>

</Customer>


<Customer cid="C2" name="Ursula" city="Oelde" >

<Order
oid="O3" date="7/14/1999" amount="100" note="Wrap it blue

white
red">

<Urgency>Important</Urgency>

Happy Customer.

</Order>

<Order
oid="O4" date="1/20/1996" amount="10000"/>

</Customer>

</root>



-- Create an internal representation of the XML
document.

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- Execute a SELECT statement using OPENXML rowset provider.

SELECT *

FROM OPENXML (@idoc, ’/root/Customer/Order’, 1)

WITH (oid
char(5),

amount float,

comment ntext ’text()’)

EXEC sp_xml_removedocument @idoc

/********************导整个数据库
*********************************************/

用bcp实现的存储过程

/*

实现数据导入/导出的存储过程

根据不同的参数,可以实现导入/导出整个数据库
/单个表

调用示例:

--导出调用示例

----导出单个表

exec
file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:/zj.txt’,1

----导出整个数据库


exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:/docman’,1

--导入调用示例

----导入单个表

exec file2table
’zj’,’’,’’,’xzkh_sa..地区资料’,’c:/zj.txt’,0

----导入整个数据库


exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:/docman’,0

*/

if exists(select 1 from sysobjects where name=’File2Table’ and
objectproperty(id,’IsProcedure’)=1)

drop procedure File2Table

go

create procedure File2Table

@servername varchar(200) --服务器


,@username varchar(200) --用户名,如果用NT验证方式,则为空’’

,@password varchar(200) --密码

,@tbname varchar(500) --数据库
.dbo.表名,如果不指定:.dbo.表名,则导出数据库
的所有用户表

,@filename varchar(1000) --导入/导出路径/文件
名,如果@tbname参数指明是导出整个数据库
,则这个参数是文件
存放路径,文件
名自动用表名.txt

,@isout bit --1为导出,0为导入

as

declare @sql
varchar(8000)

if @tbname like ’%.%.%’ --如果指定了表名,则直接导出单个表

begin

set @sql
=’bcp ’+@tbname


+case
when @isout=1 then ’ out ’ else ’ in ’ end

+’ "’+@filename+’
" /w’

+’ /S ’+@servername


+case when
isnull(@username,’’)=’’ then ’’ else ’ /U ’+@username
end

+’ /P ’+isnull(@password,’’)

exec master..xp_cmdshell @sql


end

else

begin --导出整个数据库
,定义游标,取出所有的用户表

declare @m_tbname varchar(250)

if
right(@filename,1)<>’/’ set @filename=@filename+’/’

set @m_tbname=’declare #tb cursor for select name from ’+@tbname+’..sysobjects
where
xtype=’’U’’’

exec(@m_tbname)

open #tb

fetch next from #tb into
@m_tbname

while @@fetch_status=0

begin

set @sql
=’bcp ’+@tbname+’..’+@m_tbname


+case
when @isout=1 then ’ out ’ else ’ in ’ end

+’ "’+@filename+@m_tbname+’.txt
" /w’

+’ /S ’+@servername


+case when
isnull(@username,’’)=’’ then ’’ else ’ /U ’+@username
end

+’ /P
’+isnull(@password,’’)

exec master..xp_cmdshell @sql


fetch next from #tb into @m_tbname

end

close #tb

deallocate #tb

end

go

/**********************Excel导到Txt****************************************/

想用

select * into opendatasource(...) from opendatasource(...)

实现将一个Excel文件
内容导入到一个文本文件


假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位)

且银行帐号导出到文本文件
后分两部分,前8位和后8位分开。

如果要用你上面的语句插入的话,文本文件
必须存在,而且有一行:姓名,银行账号1,银行账号2

然后就可以用下面的语句进行插入

注意文件
名和目录根据你的实际情况进行修改.

insert into

opendatasource(’MICROSOFT.JET.OLEDB.4.0’

,’Text;HDR=Yes;DATABASE=C:/’

)...[aa#txt]

--,aa#txt)

--*/

select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)

from

opendatasource(’MICROSOFT.JET.OLEDB.4.0’

,’Excel
5.0;HDR=YES;IMEX=2;DATABASE=c:/a.xls’

--,Sheet1$)

)...[Sheet1$]

如果你想直接插入并生成文本文件
,就要用bcp

declare @sql
varchar(8000),@tbname varchar(50)

--首先将excel表内容导入到一个全局临时表

select @tbname=’[##temp’+cast(newid() as
varchar(40))+’]’

,@sql
=’select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)

into
’+@tbname+’
from

opendatasource(’’MICROSOFT.JET.OLEDB.4.0’’

,’’Excel
5.0;HDR=YES;IMEX=2;DATABASE=c:/a.xls’’

)...[Sheet1$]’

exec(@sql
)

--然后用bcp从全局临时表导出到文本文件


set @sql
=’bcp "’+@tbname+’
" out
"c:/aa.txt" /S"(local)" /P"" /c’

exec master..xp_cmdshell @sql


--删除临时表

exec(’drop table ’+@tbname
)

用bcp将文件
导入导出到数据库
的存储过程:

/*--bcp-二进制文件
的导入导出

支持image,text,ntext字段的导入/导出

image适合于二进制文件
;text,ntext适合于文本数据文件


注意:导入时,将覆盖满足条件的所有行

导出时,将把所有满足条件的行也出到指定文件


此存储过程仅用bcp实现

邹建 2003.08-----------------*/

/*--调用示例

--数据导出

exec p_binaryIO
’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:/zj1.dat’

--数据导出

exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:/zj1.dat’,’’,0

--*/

if exists (select * from dbo.sysobjects where id =
object_id(N’[dbo].[p_binaryIO]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)

drop procedure [dbo].[p_binaryIO]

GO

Create proc p_binaryIO

@servename varchar (30),--服务器
名称

@username varchar (30), --用户名

@password varchar
(30), --密码

@tbname varchar (500), --数据库
..表名

@fdname varchar (30), --字段名

@fname varchar
(1000), --目录+文件
名,处理过程中要使用/覆盖:@filename+.bak

@tj varchar (1000)=’’,
--处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀

@isout bit=1 --1导出((默认),0导入

AS

declare @fname_in varchar(1000) --bcp处理应答文件


,@fsize varchar(20) --要处理的文件
的大小

,@m_tbname varchar(50) --临时表名

,@sql
varchar(8000)

--则取得导入文件
的大小

if @isout=1

set @fsize=’0’

else

begin

create table #tb(可选名 varchar(20),大小 int

,创建日期 varchar(10),创建时间
varchar(20)

,上次写操作日期 varchar(10),上次写操作时间 varchar(20)

,上次访问日期
varchar(10),上次访问时间 varchar(20),特性 int)

insert into #tb

exec
master..xp_getfiledetails @fname

select @fsize=大小 from #tb

drop table
#tb

if @fsize is null

begin

print ’文件
未找到’

return

end

end

--生成数据处理应答文件


set @m_tbname=’[##temp’+cast(newid() as
varchar(40))+’]’

set @sql
=’select * into ’+@m_tbname+’
from(

select null as 类型

union all select 0 as 前缀

union all select ’+@fsize+’
as 长度

union all select null as 结束

union all select null as 格式

) a’

exec(@sql
)

select @fname_in=@fname+’_temp’

,@sql
=’bcp "’+@m_tbname+’
"
out "’+@fname_in


+’" /S"’+@servename


+case when
isnull(@username,’’)=’’ then ’’

else ’" /U"’+@username
end

+’"
/P"’+isnull(@password,’’)+’" /c’

exec master..xp_cmdshell @sql


--删除临时表

set @sql
=’drop table ’+@m_tbname


exec(@sql
)

if @isout=1

begin

set @sql
=’bcp "select top 1 ’+@fdname+’
from ’

+@tbname+case
isnull(@tj,’’) when ’’ then ’’

else ’ where ’+@tj
end

+’" queryout "’+@fname


+’" /S"’+@servename


+case when
isnull(@username,’’)=’’ then ’’

else ’" /U"’+@username
end

+’"
/P"’+isnull(@password,’’)

+’" /i"mailto:’+@fname_in+’%22’


exec
master..xp_cmdshell @sql


end

else

begin

--为数据导入准备临时表

set @sql
=’select top 0 ’+@fdname+’

into ’

+@m_tbname+’
from ’ +@tbname


exec(@sql
)

--将数据导入到临时表

set @sql
=’bcp "’+@m_tbname+’
" in
"’+@fname


+’" /S"’+@servename


+case when
isnull(@username,’’)=’’ then ’’

else ’" /U"’+@username
end

+’"
/P"’+isnull(@password,’’)

+’" /i"mailto:’+@fname_in+’%22’


exec
master..xp_cmdshell @sql




--将数据导入到正式表中

set @sql
=’update ’+@tbname


+’
set ’+@fdname+’=b.’+@fdname



+’ from ’+@tbname+’
a,’

+@m_tbname+’
b’

+case isnull(@tj,’’) when
’’ then ’’

else ’ where ’+@tj
end

exec(@sql
)

--删除数据处理临时表

set @sql
=’drop table ’+@m_tbname


end

--删除数据处理应答文件


set @sql
=’del ’+@fname_in


exec
master..xp_cmdshell @sql


go

/** 导入文本文件


EXEC master..xp_cmdshell ’bcp "dbname..tablename" in
c:/DT.txt -c -Sservername -Usa -Ppassword’

改为如下,不需引号

EXEC master..xp_cmdshell ’bcp dbname..tablename in c:/DT.txt -c
-Sservername -Usa -Ppassword’

/** 导出文本文件


EXEC master..xp_cmdshell ’bcp "dbname..tablename" out
c:/DT.txt -c -Sservername -Usa -Ppassword’

此句需加引号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: