EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 4095|回复: 67
打印 上一主题 下一主题

[SQL语言] SQL语句导入导出大全

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-9 15:36:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

   <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

???????
/**********************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外,均不支持非本机数据导入
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言

5

主题

565

帖子

563

积分

BIM专业负责人

Rank: 4Rank: 4Rank: 4Rank: 4

积分
563

社区QQ达人

推荐
发表于 2015-12-11 13:41:22 | 只看该作者
可以去中国BIM威客平台看看真实项目私活

14

主题

2892

帖子

2085

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
2085
推荐
发表于 2016-2-25 10:06:16 | 只看该作者
支持一下    (● ̄(エ) ̄●)
推荐
发表于 2017-5-8 10:16:33 | 只看该作者
很好。 来学习一下

3

主题

928

帖子

1394

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1394
7F
发表于 2014-3-10 11:55:30 | 只看该作者
顶......
楼下跟上.....

13

主题

730

帖子

1691

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1691
8F
发表于 2014-3-10 12:08:52 | 只看该作者
(*^__^*) 嘻嘻……

5

主题

843

帖子

1376

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1376
9F
发表于 2014-3-12 14:48:27 | 只看该作者
顶......
楼下跟上.....

31

主题

1019

帖子

1897

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1897
10F
发表于 2014-3-12 14:53:54 | 只看该作者
顶......
楼下跟上.....

12

主题

861

帖子

1353

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1353
18F
发表于 2014-3-28 10:16:43 | 只看该作者
(*^__^*) 嘻嘻……
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-23 11:06

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表