SQL语句导入导出大全

-- 1.excel-------------------------------
--
 导出到excel
EXEC  master..xp_cmdshell  '' bcp SettleDB.dbo.shanghu out c:/temp1.xls  - - - 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

-- 动态文件名
declare   @fn   varchar ( 20 ), @s   varchar ( 1000 )
set   @fn   =   '' c:/test.xls ''
set   @s   = '''''' Microsoft.Jet.OLEDB. 4.0 '''' ,
'''' Data Source = " '' + @fn + '' "; User  ID = Admin;Password = ;Extended properties = Excel  5.0 ''''''
set   @s   =   '' SELECT   *   FROM   OpenDataSource  ( '' + @s + '' )sheet1$ ''
exec ( @s )


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
-- -------------------------------------

--  EXCEL导到远程SQL
insert   OPENDATASOURCE (
'' SQLOLEDB '' ,
'' Data Source = 远程ip; User  ID = sa;Password = 密码 ''
).库名.dbo.表名 (列名1,列名2)
SELECT  列名1,列名2
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  - - Sservername  - Usa  - Ppassword ''

-- 导出文本文件
EXEC  master..xp_cmdshell  '' bcp dbname..tablename out c:/DT.txt  - - Sservername  - Usa  - Ppassword ''
--
EXEC  master..xp_cmdshell  '' bcp " Select   *   from  dbname..tablename" queryout c:/DT.txt  - - Sservername  - Usa  - Ppassword ''

-- 导出到TXT文本,用逗号分开
exec  master..xp_cmdshell  '' bcp "库名..表名" out "d:/tt.txt"  - - t , - U sa  - P password ''


BULK   INSERT  库名..表名
FROM   '' c:/test.txt ''
WITH  (
FIELDTERMINATOR 
=   '' ; '' ,
ROWTERMINATOR 
=   ''
''
)


--  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表)

文件名为参数
declare   @fname   varchar ( 20 )
set   @fname   =   '' d:/test.mdb ''
exec ( '' SELECT  a. *   FROM   opendatasource ( '''' Microsoft.Jet.OLEDB. 4.0 '''' ,
'''''' + @fname + '''''' ; '''' admin '''' ; '''''''' , topics)  as  a  '' )

SELECT   *  
FROM   OpenDataSource '' Microsoft.Jet.OLEDB. 4.0 '' ,
'' Data Source = "f:
orthwind.mdb";Jet OLEDB:
Database  Password = 123 ; User  ID = Admin;Password = ; '' )产品
-- ********************* 导入 xml 文件

DECLARE   @idoc   int
DECLARE   @doc   varchar ( 1000 )
-- sample XML document.BR> 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.nbsp @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.nbsp @idoc





/**********************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实现的存储过程



--  实现数据导入/导出的存储过程
--
 根据不同的参数,可以实现导入/导出整个数据库/单个表
--
 调用示例:
--
导出调用示例
--
--导出单个表
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


/************* Oracle **************/
EXEC  sp_addlinkedserver  ' OracleSvr '
' Oracle 7.3 '
' MSDAORA '
' ORCLDB '
GO

delete   from   openquery (mailser, ' select * from yulin ' )

select   *   from   openquery (mailser, ' select * from yulin ' )

update   openquery (mailser, ' select * from yulin where id=15 ' ) set  disorder = 555 ,catago = 888

insert   into   openquery (mailser, ' select disorder,catago from yulin ' ) values ( 333 , 777 )

--  补充:
--
 
--
 对于用bcp导出,是没有字段名的.
--
 
--
 用openrowset导出,需要事先建好表.
--
 
--
 用openrowset导入,除ACCESS及EXCEL外,均不支持非本机数据导入
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值