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’
此句需加引号
我们分析上面的两个操作,都有一个“删除数据”的过程。 习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。 记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。 如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。 连做梦都在想页面结构是怎么样的,绝非虚言 where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。 原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。 然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情 以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
页:
[1]