深爱那片海 发表于 2015-1-16 22:40:14

MSSQL网页设计(MS SQL Server)SQL语句导进导出年夜全

InnoDB数据表的索引,与InnoDB数据表相比,在InnoDB数据表上,索引对InnoDB数据表的重要性要大得多。在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。server|语句
/*******导出到excel

EXECmaster..xp_cmdshell’bcpSettleDB.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

SELECTcast(cast(科目编号asnumeric(10,2))asnvarchar(255))+’ ’转换后的别号
FROMOpenDataSource(’Microsoft.Jet.OLEDB.4.0’,
’DataSource="c:        est.xls";UserID=Admin;Password=;Extendedproperties=Excel5.0’)...xactions

/**导进文本文件

EXECmaster..xp_cmdshell’bcp"dbname..tablename"inc:DT.txt-c-Sservername-Usa-Ppassword’

/**导出文本文件

EXECmaster..xp_cmdshell’bcp"dbname..tablename"outc:DT.txt-c-Sservername-Usa-Ppassword’



EXECmaster..xp_cmdshell’bcp"Select*fromdbname..tablename"queryoutc:DT.txt-c-Sservername-Usa-Ppassword’

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

execmaster..xp_cmdshell’bcp"库名..表名"out"d:        t.txt"-c-t,-Usa-Ppassword’

BULKINSERT库名..表名
FROM’c:        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’)
--*/

/**************导进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’)
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表)

*********************导进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,
commentntext’text()’)
EXECsp_xml_removedocument@idoc


/********************导全部数据库*********************************************/

用bcp完成的存储历程


/*
完成数据导进/导出的存储历程
依据分歧的参数,能够完成导进/导出全部数据库/单个表
挪用示例:
--导出挪用示例
----导出单个表
execfile2table’zj’,’’,’’,’xzkh_sa..区域材料’,’c:zj.txt’,1
----导出全部数据库
execfile2table’zj’,’’,’’,’xzkh_sa’,’C:docman’,1

--导进挪用示例
----导进单个表
execfile2table’zj’,’’,’’,’xzkh_sa..区域材料’,’c:zj.txt’,0
----导进全部数据库
execfile2table’zj’,’’,’’,’xzkh_sa’,’C:docman’,0

*/

ifexists(select1fromsysobjectswherename=’File2Table’andobjectproperty(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=1then’out’else’in’end
+’"’+@filename+’"/w’
+’/S’+@servername
+casewhenisnull(@username,’’)=’’then’’else’/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=1then’out’else’in’end
+’"’+@filename+@m_tbname+’.txt"/w’
+’/S’+@servername
+casewhenisnull(@username,’’)=’’then’’else’/U’+@usernameend
+’/P’+isnull(@password,’’)
execmaster..xp_cmdshell@sql
fetchnextfrom#tbinto@m_tbname
end
close#tb
deallocate#tb
end
go


/**********************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)
--*/
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$)
)...

假如你想间接拔出并天生文本文件,就要用bcp

declare@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’’
)...’
exec(@sql)

--然后用bcp从全局一时表导出到文本文件
set@sql=’bcp"’+@tbname+’"out"c:aa.txt"/S"(local)"/P""/c’
execmaster..xp_cmdshell@sql

--删除一时表
exec(’droptable’+@tbname)


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


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

撑持image,text,ntext字段的导进/导出
image合适于二进制文件;text,ntext合适于文本数据文件

注重:导进时,将掩盖满意前提的一切行
导出时,将把一切满意前提的行也出到指定文件中

此存储历程仅用bcp完成
邹建2003.08-----------------*/

/*--挪用示例
--数据导出
execp_binaryIO’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:zj1.dat’

--数据导出
execp_binaryIO’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:zj1.dat’,’’,0
--*/
ifexists(select*fromdbo.sysobjectswhereid=object_id(N’.’)andOBJECTPROPERTY(id,N’IsProcedure’)=1)
dropprocedure.
GO

Createprocp_binaryIO
@servenamevarchar(30),--服务器称号
@usernamevarchar(30),--用户名
@passwordvarchar(30),--暗码
@tbnamevarchar(500),--数据库..表名
@fdnamevarchar(30),--字段名
@fnamevarchar(1000),--目次+文件名,处置过程当中要利用/掩盖:@filename+.bak
@tjvarchar(1000)=’’,--处置前提.关于数据导进,假如前提中包括@fdname,请指定表名前缀
@isoutbit=1--1导出((默许),0导进
AS
declare@fname_invarchar(1000)--bcp处置应对文件名
,@fsizevarchar(20)--要处置的文件的巨细
,@m_tbnamevarchar(50)--一时表名
,@sqlvarchar(8000)

--则获得导进文件的巨细
if@isout=1
set@fsize=’0’
else
begin
createtable#tb(可选名varchar(20),巨细int
,创立日期varchar(10),创立工夫varchar(20)
,前次写操纵日期varchar(10),前次写操纵工夫varchar(20)
,前次会见日期varchar(10),前次会见工夫varchar(20),特征int)
insertinto#tb
execmaster..xp_getfiledetails@fname
select@fsize=巨细from#tb
droptable#tb
if@fsizeisnull
begin
print’文件未找到’
return
end

end

--天生数据处置应对文件
set@m_tbname=’[##temp’+cast(newid()asvarchar(40))+’]’
set@sql=’select*into’+@m_tbname+’from(
selectnullas范例
unionallselect0as前缀
unionallselect’+@fsize+’as长度
unionallselectnullas停止
unionallselectnullas格局
)a’
exec(@sql)
select@fname_in=@fname+’_temp’
,@sql=’bcp"’+@m_tbname+’"out"’+@fname_in
+’"/S"’+@servename
+casewhenisnull(@username,’’)=’’then’’
else’"/U"’+@usernameend
+’"/P"’+isnull(@password,’’)+’"/c’
execmaster..xp_cmdshell@sql
--删除一时表
set@sql=’droptable’+@m_tbname
exec(@sql)

if@isout=1
begin
set@sql=’bcp"selecttop1’+@fdname+’from’
+@tbname+caseisnull(@tj,’’)when’’then’’
else’where’+@tjend
+’"queryout"’+@fname
+’"/S"’+@servename
+casewhenisnull(@username,’’)=’’then’’
else’"/U"’+@usernameend
+’"/P"’+isnull(@password,’’)
+’"/i"’+@fname_in+’"’
execmaster..xp_cmdshell@sql
end
else
begin
--为数据导进筹办一时表
set@sql=’selecttop0’+@fdname+’into’
+@m_tbname+’from’+@tbname
exec(@sql)


--将数据导进光临时表
set@sql=’bcp"’+@m_tbname+’"in"’+@fname
+’"/S"’+@servename
+casewhenisnull(@username,’’)=’’then’’
else’"/U"’+@usernameend
+’"/P"’+isnull(@password,’’)
+’"/i"’+@fname_in+’"’
execmaster..xp_cmdshell@sql

--将数据导进到正式表中
set@sql=’update’+@tbname
+’set’+@fdname+’=b.’+@fdname
+’from’+@tbname+’a,’
+@m_tbname+’b’
+caseisnull(@tj,’’)when’’then’’
else’where’+@tjend
exec(@sql)

--删除数据处置一时表
set@sql=’droptable’+@m_tbname
end

--删除数据处置应对文件
set@sql=’del’+@fname_in
execmaster..xp_cmdshell@sql

go


/**导进文本文件
EXECmaster..xp_cmdshell’bcp"dbname..tablename"inc:DT.txt-c-Sservername-Usa-Ppassword’

改成以下,不需引号
EXECmaster..xp_cmdshell’bcpdbname..tablenameinc:DT.txt-c-Sservername-Usa-Ppassword’

/**导出文本文件
EXECmaster..xp_cmdshell’bcp"dbname..tablename"outc:DT.txt-c-Sservername-Usa-Ppassword’
此句需加引号


我们分析上面的两个操作,都有一个“删除数据”的过程。

若相依 发表于 2015-1-19 21:08:53

习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。

深爱那片海 发表于 2015-1-28 10:43:18

记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。

灵魂腐蚀 发表于 2015-2-5 20:41:45

如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。

小妖女 发表于 2015-2-13 11:48:53

连做梦都在想页面结构是怎么样的,绝非虚言

再现理想 发表于 2015-3-3 20:55:03

where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

莫相离 发表于 2015-3-11 13:38:27

原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。

若天明 发表于 2015-3-18 14:43:17

然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情

愤怒的大鸟 发表于 2015-3-26 00:20:54

以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
页: [1]
查看完整版本: MSSQL网页设计(MS SQL Server)SQL语句导进导出年夜全