仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2234|回复: 9
打印 上一主题 下一主题

[学习教程] MSSQL编程:导进导出数据语句小结

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:33:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
支持AIX、FreeBSD、HP-UX、Linux、MacOS、NovellNetware、OpenBSD、OS/2Wrap、Solaris、Windows等多种操作系统导出数据|语句/*导出到excel
EXECmaster..xp_cmdshellbcpSettleDB.dbo.shanghuoutc:        emp1.xls-c-q-S"GNETDATA/GNETDATA"-U"sa"-P""/*导进Excel
SELECT*
FROMOpenDataSource(Microsoft.Jet.OLEDB.4.0,
DataSource="c:        est.xls";UserID=Admin;Password=;Extendedproperties=Excel5.0)...xactions/*静态文件名
declare@fnvarchar(20),@svarchar(1000)
set@fn=c:        est.xls
set@s=Microsoft.Jet.OLEDB.4.0,
DataSource="+@fn+";UserID=Admin;Password=;Extendedproperties=Excel5.0
set@s=SELECT*FROMOpenDataSource(+@s+)...sheet1$
exec(@s)
*/SELECTcast(cast(科目编号asnumeric(10,2))asnvarchar(255))+ 转换后的别号
FROMOpenDataSource(Microsoft.Jet.OLEDB.4.0,
DataSource="c:        est.xls";UserID=Admin;Password=;Extendedproperties=Excel5.0)...xactions/**********************EXCEL导到远程SQL
insertOPENDATASOURCE(
SQLOLEDB,
DataSource=远程ip;UserID=sa;Password=暗码
).库名.dbo.表名(列名1,列名2)
SELECT列名1,列名2
FROMOpenDataSource(Microsoft.Jet.OLEDB.4.0,
DataSource="c:        est.xls";UserID=Admin;Password=;Extendedproperties=Excel5.0)...xactions
/**导进文本文件
EXECmaster..xp_cmdshellbcpdbname..tablenameinc:DT.txt-c-Sservername-Usa-Ppassword/**导出文本文件
EXECmaster..xp_cmdshellbcpdbname..tablenameoutc:DT.txt-c-Sservername-Usa-Ppassword

EXECmaster..xp_cmdshellbcp"Select*fromdbname..tablename"queryoutc:DT.txt-c-Sservername-Usa-Ppassword导出到TXT文本,用逗号分隔
execmaster..xp_cmdshellbcp"库名..表名"out"d:        t.txt"-c-t,-Usa-Ppassword
BULKINSERT库名..表名
FROMc:        est.txt
WITH(
FIELDTERMINATOR=;,
ROWTERMINATOR=

)
--/*dBaseIV文件
select*from
OPENROWSET(MICROSOFT.JET.OLEDB.4.0
,dBaseIV;HDR=NO;IMEX=2;DATABASE=C:,select*from[客户材料4.dbf])
--*/--/*dBaseIII文件
select*from
OPENROWSET(MICROSOFT.JET.OLEDB.4.0
,dBaseIII;HDR=NO;IMEX=2;DATABASE=C:,select*from[客户材料3.dbf])
--*/--/*FoxPro数据库
select*fromopenrowset(MSDASQL,
Driver=MicrosoftVisualFoxProDriver;SourceType=DBF;SourceDB=c:,
select*from[aa.DBF])
--*//**************导进DBF文件****************/
select*fromopenrowset(MSDASQL,
Driver=MicrosoftVisualFoxProDriver;
SourceDB=e:VFP98data;
SourceType=DBF,
select*fromcustomerwherecountry!="USA"orderbycountry)
go
/*****************导出到DBF***************/
假如要导出数据到已天生布局(即现存的)FOXPRO表中,能够间接用上面的SQL语句insertintoopenrowset(MSDASQL,
Driver=MicrosoftVisualFoxProDriver;SourceType=DBF;SourceDB=c:,
select*from[aa.DBF])
select*from表申明:
SourceDB=c:指定foxpro表地点的文件夹
aa.DBF指定foxpro表的文件名.
/*************导出到Access********************/
insertintoopenrowset(Microsoft.Jet.OLEDB.4.0,
x:A.mdb;admin;,A表)select*from数据库名..B表/*************导进Access********************/
insertintoB表selet*fromopenrowset(Microsoft.Jet.OLEDB.4.0,
x:A.mdb;admin;,A表)文件名为参数
declare@fnamevarchar(20)
set@fname=d:        est.mdb
exec(SELECTa.*FROMopendatasource(Microsoft.Jet.OLEDB.4.0,
+@fname+;admin;,topics)asa)SELECT*
FROMOpenDataSource(Microsoft.Jet.OLEDB.4.0,
DataSource="f:
orthwind.mdb";JetOLEDB:DatabasePassword=123;UserID=Admin;Password=;)...产物*********************导进xml 文件DECLARE@idocint
DECLARE@docvarchar(1000)
--sampleXMLdocument
SET@doc=
<root>
<Customercid="C1"name="Janine"city="Issaquah">
<Orderoid="O1"date="1/20/1996"amount="3.5"/>
<Orderoid="O2"date="4/30/1997"amount="13.4">Customerwasverysatisfied
</Order>
</Customer>
<Customercid="C2"name="Ursula"city="Oelde">
<Orderoid="O3"date="7/14/1999"amount="100"note="Wrapitblue
whitered">
<Urgency>Important</Urgency>
HappyCustomer.
</Order>
<Orderoid="O4"date="1/20/1996"amount="10000"/>
</Customer>
</root>

--CreateaninternalrepresentationoftheXMLdocument.
EXECsp_xml_preparedocument@idocOUTPUT,@doc--ExecuteaSELECTstatementusingOPENXMLrowsetprovider.
SELECT*
FROMOPENXML(@idoc,/root/Customer/Order,1)
WITH(oidchar(5),
amountfloat,
commentntexttext())
EXECsp_xml_removedocument@idoc???????/**********************Excel导到Txt****************************************/
想用
select*intoopendatasource(...)fromopendatasource(...)
完成将一个Excel文件内容导进到一个文本文件假定Excel中有两列,第一列为姓名,第二列为很行帐号(16位)
且银行帐号导出到文本文件后分两部分,前8位和后8位分隔。
邹健:
假如要用你下面的语句拔出的话,文本文件必需存在,并且有一行:姓名,银行账号1,银行账号2
然后就能够用上面的语句举行拔出
注重文件名和目次依据你的实践情形举行修正.insertinto
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
,Excel5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls
--,Sheet1$)
)...[Sheet1$]假如你想间接拔出并天生文本文件,就要用bcpdeclare@sqlvarchar(8000),@tbnamevarchar(50)--起首将excel表内容导进到一个全局一时表
select@tbname=[##temp+cast(newid()asvarchar(40))+]
,@sql=select姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
into+@tbname+from
opendatasource(MICROSOFT.JET.OLEDB.4.0
,Excel5.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
execmaster..xp_cmdshell@sql--删除一时表
exec(droptable+@tbname)
/********************导全部数据库*********************************************/用bcp完成的存储历程
/*
完成数据导进/导出的存储历程
依据分歧的参数,能够完成导进/导出全部数据库/单个表
挪用示例:
--导出挪用示例
----导出单个表
execfile2tablezj,,,xzkh_sa..区域材料,c:zj.txt,1
----导出全部数据库
execfile2tablezj,,,xzkh_sa,C:docman,1--导进挪用示例
----导进单个表
execfile2tablezj,,,xzkh_sa..区域材料,c:zj.txt,0
----导进全部数据库
execfile2tablezj,,,xzkh_sa,C:docman,0*/
ifexists(select1fromsysobjectswherename=File2Tableandobjectproperty(id,IsProcedure)=1)
dropprocedureFile2Table
go
createprocedureFile2Table
@servernamevarchar(200)--服务器名
,@usernamevarchar(200)--用户名,假如用NT考证体例,则为空
,@passwordvarchar(200)--暗码
,@tbnamevarchar(500)--数据库.dbo.表名,假如不指定:.dbo.表名,则导出数据库的一切用户表
,@filenamevarchar(1000)--导进/导前路径/文件名,假如@tbname参数指明是导出全部数据库,则这个参数是文件寄存路径,文件名主动用表名.txt
,@isoutbit--1为导出,0为导进
as
declare@sqlvarchar(8000)if@tbnamelike%.%.%--假如指定了表名,则间接导出单个表
begin
set@sql=bcp+@tbname
+casewhen@isout=1thenoutelseinend
+"+@filename+"/w
+/S+@servername
+casewhenisnull(@username,)=thenelse/U+@usernameend
+/P+isnull(@password,)
execmaster..xp_cmdshell@sql
end
else
begin--导出全部数据库,界说游标,掏出一切的用户表
declare@m_tbnamevarchar(250)
ifright(@filename,1)set@filename=@filename+set@m_tbname=declare#tbcursorforselectnamefrom+@tbname+..sysobjectswherextype=U
exec(@m_tbname)
open#tb
fetchnextfrom#tbinto@m_tbname
while@@fetch_status=0
begin
set@sql=bcp+@tbname+..+@m_tbname
+casewhen@isout=1thenoutelseinend
+"+@filename+@m_tbname+.txt"/w
+/S+@servername
+casewhenisnull(@username,)=thenelse/U+@usernameend
+/P+isnull(@password,)
execmaster..xp_cmdshell@sql
fetchnextfrom#tbinto@m_tbname
end
close#tb
deallocate#tb
end
go
/*************Oracle**************/
EXECsp_addlinkedserverOracleSvr,
Oracle7.3,
MSDAORA,
ORCLDB
GOdeletefromopenquery(mailser,select*fromyulin)select*fromopenquery(mailser,select*fromyulin)updateopenquery(mailser,select*fromyulinwhereid=15)setdisorder=555,catago=888insertintoopenquery(mailser,selectdisorder,catagofromyulin)values(333,777)增补:关于用bcp导出,是没有字段名的.用openrowset导出,必要事前建好表.用openrowset导进,除ACCESS及EXCEL外,均不撑持非本机数据导进MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-1-17 16:17:33 | 只看该作者
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-20 20:25:17 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
蒙在股里 该用户已被删除
地板
发表于 2015-1-29 20:52:12 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
精灵巫婆 该用户已被删除
5#
发表于 2015-2-6 04:45:54 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
若天明 该用户已被删除
6#
发表于 2015-2-15 13:50:37 | 只看该作者
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
飘飘悠悠 该用户已被删除
7#
发表于 2015-3-4 11:34:40 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
变相怪杰 该用户已被删除
8#
发表于 2015-3-11 19:16:59 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
乐观 该用户已被删除
9#
发表于 2015-3-19 09:17:21 | 只看该作者
总感觉自己还是不会SQL
小女巫 该用户已被删除
10#
发表于 2015-3-27 18:09:31 | 只看该作者
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-25 00:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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