搜档网
当前位置:搜档网 › SQL在Excel中的应用方法

SQL在Excel中的应用方法

SQL在Excel中的应用方法
SQL在Excel中的应用方法

iamlaosng文

Excel中使用SQL的主要目的是连接(或Excel工作表)导入数据或者对这些数据进行统计汇总,要达到这个目的,需要好好学习SQL语句的使用。本文主要说明在Excel 中如何使用SQL,至于SQL语句本身就不多作介绍了。

一、简单的查询

1、建立查询

数据选项卡—现有连接—浏览更多或者按快捷键Alt+D+D+D

选择要查询的Excel文件和文件中的的工作表,就可以将相应工作表的数据取过来。表现形式可以是表,也可以是数据透视表等。

2、SQL查询语句

如果是挑选部分列数据,就需要用SQL语句(取所有数据也可以用SQL语句)。

?建立查询时,选择工作表后不要点击“确定”按钮,而是先点击“属性”按钮,弹出窗口中选择“定义”选项卡,在命令文本框中输入SQL查询语句(原来的工作表名称,表示所有数据,可以认为是取所有数据的SQL的一种特殊写法):

Select字段列表from[工作表名$]

--其中字段列表就是需要选择的字段,数据源用工作表名称加“$“再用中括号括起来,例如:

selectprov_name,city_name,xs_mc,xs_codefrom[Sheet1$]

select*from[Sheet1$]--取所有数据

?偶然发现,字段名不能用no,估计是保留字,如需要,用中括号括起来,例如:

select[no],prov_name,city_name,xs_mc,xs_codefrom[Sheet1$]

字段名中含有特殊字符的也要用中括号括起来,如/空格等

Excel查询没有伪表概念,对于表达式的计算直接用select既可,例如

Select23+45--返回68

Selectdate()--返回当前日期

3、修改查询语句

?方法:点击右键—弹出菜单—表格—编辑查询

通过修改SQL语句可以变更所取的数据,也可以将建立查询时的简单SQL语句改成复杂的SQL语句。

?字段名更换:如果想换个字段名,用“as新字段名”既可,例如:

selectprov_nameas省,city_nameas城市,xs_mcas县市,xs_codeas编码from[Sheet1$]?非正常表格:数据区域(含字段名)不在第一行

需要在工作表名称后面指定数据范围,例如:

selectprov_name,city_name,xs_mc,xs_codefrom[Sheet1$B2:G2000]

或者,将数据块定义为一个名称,假设定义为mydata,SQL语句如下:

selectprov_name,city_name,xs_mc,xs_codefrommydata

注意:使用名称时没有$符号,也没有方括号了。

?数据更新:数据源发生变化,需要更新数据,方法:点击右键—弹出菜单—刷新

?意外:如果打开Excel文件后弹出不是选择工作表的窗口而是一个“数据连接属性”窗口,可以关闭这个窗口,然后将Excel应用极小化再极大化方式消除,或者在弹出选择文件的窗口时,退回上一级文件夹,删除那个Queries文件夹,就行了。

4、外部数据属性

修改SQL语句后,如显示格式不是预想的那样,需要去掉“外部数据属性”中“保留列属性”前面的勾选。方法:点击右键—弹出菜单—表格—外部数据属性,弹出窗口如下:

二、复杂的查询

1、多表联合

?相同结构的多个表合并到一起,用union连接SQL语句,例如:

Select*from[财务部$]unionallSelect*from[市场部$]

Union是去重复的,即相同的记录保留一个(类似distinct),Unionall则是直接相加两个结果,不去重复。

?增加一个部门字段可以将查询结果中的区分开来,以便知道数据来自哪个表。

Union的三个一致,即:字段的数量、类型和顺序。例如:

Select“财务部”as部门,*from[财务部$]unionallSelect“市场部”as部门,*from[市场部$]

?多表联合查询

Select*from[部门$]bm,[员工$]ygwherebm.部门编码=yg.部门编码

?跨工作簿查询

如果数据不仅来自不同的工作表,还来自不同的文件,一样可以用union联合,例如:

Select“分公司1”as公司,“财务部”as部门,*from[F:\SQL之Excel应用\分公司].[财务部$]unionall

Select“分公司1”as公司,“市场部”as部门,*from[F:\SQL之Excel应用\分公司].[市场部$]unionall

Select“分公司2”as公司,“财务部”as部门,*from[F:\SQL之Excel应用\分公司].[财务部$]unionall

Select“分公司2”as公司,“市场部”as部门,*from[F:\SQL之Excel应用\分公司].[市场部$]

因为SQL中已经指定了文件名和表名,所以建立连接时连接谁并不重要,这种情况下,建立连接的时候就连接自己,然后再改写SQL语句。

2、子查询和多表连接

所谓子查询就是将一个查询结果作为数据源放在主查询语句中,多表连接则是将两个有关联的表通过关键字段连接在一起查询,这都是SQL知识,不再赘述,需要注意的是,不同的数据库系统SQL都有些微小的差别,Excel 中的SQL也有其自己的一些特点,关于多表查询的写法,见本文附录。

3、常用运算符

?有条件的查询

条件是where引导的,用and、or等连接,例如:

selectprov_name,city_name,xs_mc,xs_codefrom[Sheet1$]w hereprov_name=’安徽’orprov_name=’江苏’

--虽然字符串可以用双引号,但建议用单引号,因为oracle、SQLserver都是用单引号。

?常用运算符:in、notin、between…and…、isnull、isnotnull、&(连字符)、like、notlike,注意:null和任何字段运算的结果都是null。

?通配符:%(所有字符或无字符)、_(单个字符)、[](区间,如[1-9]、[!a-f]、[1,3,5]),例如:

select*from[Sheet1$]whereE maillike‘[h-m]%’--h-m开头的电子邮件

select*from[Sheet1$]wherexs_codelike'%[!1,3,5]'–和notlike'%[1,3,5]'效果相同

select*from[Sheet1$]where户籍&’-’&工作地like'%合肥%'--中间加个“-”防止误差

?筛选查询结果:

Distinct去重复、topn取前n条记录

?聚合函数:

count、sum、min、max、avg排序:orderby、分组:groupby、分组后筛选:having ?SQL中关键字的执行顺序:

from=1where=2groupby=3having=4orderby=5select=6,因为select在最后,所以其它关键字后面不能用字段别名,不过,表的别名是可以用的,因为from排在第一。

4、常用函数

除了聚合函数,还有很多其他函数,这些函数有的是所有数据库系统都有的,有的是数据库系统特有的。Excel 中工作表中使用的函数基本都能在SQL中使用,例如:

?数学:abs、int、fix、round、mod、rnd、……

?文本:left、right、mid、len、instr、string、replace、format、……

?条件:iif、switch、choose、……

?日期:date/now、year/month/day、weekday、dateserial、……

有些函数用法和工作表中略有不同,如date可以取当前日期,但是不能合成日期,合成日期用dateserial(这个函数只能在SQL中使用)

5、交叉查询

交叉查询产生一个透视表,相当于一个矩形二维表,这是Excel特有的查询,格式如下:

Transform聚合函数select行标签from[数据表$]groupby行标签pivot列标签,例如:

Transformsum(工资)select部门名称from[员工$]groupby部门名称pivot职务

这个语句产生的结果与数据透视表差不多,相当于一个语句产生一个数据透视表,当然这个透视表是固定的,和语句对应的。其中的select语句,相当于数据透视表的行字段,其中的聚合函数的参数相当于拖到数据透视表数据区域的值字段,使用的聚合函数即值字段的汇总方式。其中的pivot字段相当于数据透视表的列字段,后面的IN(value1[,value2[,...]])],相当列字段中的项的排序和筛选,摆弄过数据透视表,将transform/pivot语句与数据透视表对照,可以轻松掌握这个MSJET新增SQL语句。看一下效果:

列标签筛选

Transformsum(工资)select部门名称from[员工$]groupby部门名称pivot职务in(‘主管’,‘经理’)

多个行标签

Transformsum(工资)select职务,性别from[员工$]groupby职务,性别pivot部门名称

如需要添加总计,则需要先构造一个子查询结果,这个结果由正常的查询和统计查询联合在一起,再以这个结果作为数据源,构成上面的二维表。例如:

Transformsum(工资)select部门名称from(

Select部门名称,职务,工资from[员工$]unionall

Select部门名称,’总计’,sum(工资)from[员工$]groupby部门名称

)groupby部门名称pivot职务in(‘主管’,‘经理,’职员’,’总计’)

6、文本型数字

SQL查询时字段类型是由前8行数据决定的(这个数字是Excel定的),如果前8行都是数值型,后面有文本型数字,则查询结果中这些数字变成为空;前8行是文本型,后面是数值型则不影响,似乎查询结果偏向文本。如果前8行中类型不一致,有数值型,也有文本型数字,可以通过在连接字符串中加入IMEX=1则后面有文本型字符也没关系,但是,如果前8行都是数值型,加了这个也不管用,因为前8行已经决定是数值型了。加IMEX 位置如下:

桌面

\;Mode=ShareDenyWrite;ExtendedProperties="HDR=YES;IMEX=1";JetOLEDB:Systemdatabase="";JetOLED B:RegistryPath="";JetOLEDB:EngineType=35;JetOLEDB:DatabaseLockingMode=0;JetOLEDB:GlobalPartialB ulkOps=2;JetOLEDB:GlobalBulkTransactions=1;JetOLEDB:NewDatabasePassword="";JetOLEDB:CreateSys temDatabase=False;JetOLEDB:EncryptDatabase=False;JetOLEDB:Don'tCopyLocaleonCompact=False;JetO LEDB:CompactWithoutReplicaRepair=False;JetOLEDB:SFP=False;JetOLEDB:SupportComplexData=False 7、删除无用的数据源

随着我们建立的查询越来越多,打开现有连接时会出现很多我们原来建立的连接,这些连接是Windows自动保存以便于我们再次使用的,如要删除,可进入“我的文档”下面的“我的数据源”文件夹,删除这些无用的数据源或者直接删除“我的数据源”文件夹。

删除这些连接不会影响原来建立的那些查询。

8、MicrosoftQuery工具

可以利用MQ工具建立查询,对于不熟悉SQL语言的可以用这个调试SQL语句。MQ向导会提供可视化工具,一步一步引导我们得到所需的数据。查询生成后,可以点击“SQL”按钮进一步修改SQL语句。

?打开方法:数据选项卡—自其它来源—来自MicrosoftQuery工具—Excelfiles,选择文件后确定,进入工具。

如果不能选择xlsx文件,是因为数据源版本驱动太低,进入控制面板--管理工具—数据源(ODBC),点击配置,数据库版本选择版本(office2007以上);如果找不到以上版本,就删除原来的数据源Excelfiles,重新添加一个,注意要选择带有xlsx的驱动程序。

office版本和版本号:office97:、office2000:、officeXP(2002):、office2003:、office2007:、office2010:、office2013: 选择文件并确定后,如果提示“数据源中没有包含可见的表格”,点击确定,在随后弹出的向导窗口中点击“选项”按钮,勾选“系统表”,确定后就可以看到表了,如下图:

?MQ工具通过可视化工具生成所需的SQL查询语句,如添加条件、分组等等。

点击“SQL”按钮查看生成的语句,可以看到文件名和表名都是用单引号括起来,和中括号效果一样。

?MQ工具不仅可以编写SQL查询语句,也可以写insert、delete、update等SQL语句,例如:

Insertinto[员工$](姓名,性别,工资)values(‘宋定才’,’男’,5000)

三、VBA中使用SQL语句

1、连接数据库的工具ADO

?ADO是个类,有三个工具:connection(连接)、command(命令)和recordset (记录集)

?使用前先引用,进入VBE,点击菜单“工具”下面的“引用”,勾选最高版本的ADO,然后就可以用new在VBA过程中创建对象了。引用窗口如下图:

2、连接Access数据库

?连接字符串:连接数据库的关键是连接串的写法,可以参考建立查询时系统自动生成的连接串,方法是:数据选项卡—自Access,在弹出窗口选择数据文件和表后,点击属性,弹出窗口中点击定义选项卡,其中的连接字符串就是连接access的字符串,内容如下:

?根据上面的连接串可以写出下面的VBA代码。连接串中大部分是默认值,VBA 代码中可以不写,例如,下面的代码是连接access数据库:

[vb]

1.'更新工作表数据,无返回数据

2.Subado_test1()

3.Dim cnn As

4.'新建一个连接对象

5.Set cnn=New

6.'建立连接

7.With cnn

8..Provider=

9.'当前文件的路径可以用

10..Open&"\员工.accdb"

11.EndWith

12.'使用SQL语句操作数据库

13.Dim sql AsString

14.sql="update职工set年龄=20where姓名='张丽'"

15.sql'执行SQL命令,无需返回值

16.'关闭连接

17.Set cnn=Nothing'释放对象

18.MsgBox"操作成功!"

19.EndSub

?查询表,有返回记录,注意下面例子中定义和连接的不同写法:

[vb]

1.'查询数据库表数据

2.Subado_test2()

3.Dim cnn AsNew

4.'建立连接,当前文件的路径可以用

5.&&"\员工.accdb"

6.'使用SQL语句操作数据库

7.Dim sqls AsString

8.Dim rst AsNew

9.sqls="select*from职工"

10.Set rst=(sqls)'执行SQL命令

11.'用循环获取字段名

12.Dim i AsInteger

13.For i=0To

14.Cells(1,i+1)=(i).name

15.Next i

16.'保存查询记录

17.Range("a2").CopyFromRecordsetrst

18.'关闭记录集

19.Set rst=Nothing'释放对象

20.'关闭连接

21.Set cnn=Nothing'释放对象

22.MsgBox"操作成功!"

23.EndSub

?将工作表中的数据保存到数据库表中方法是更新记录集,再调用记录集update 方法,例如:

[vb]

1.'将工作表数据保存到数据库

2.Subado_test3()

3.Dim cnn As

4.Dim rst As

5.Dim sqls,mytable AsString

6.Dim i,j,n AsInteger

7.'建立连接,当前文件的路径可以用

8.Set cnn=New

9.&&"\员工.accdb"

10.mytable="职工"

11.n=Range("a1").End(xlDown).Row'当前工作表有效行数

12.'使用SQL语句操作数据库

13.For i=2To n

14.sqls="select*from"&mytable&"where编号='"&Cells(i,1).Value&"'"

15.Set rst=New

16.'用记录集对象执行SQL语句

17.,cnn,adOpenKeyset,adLockOptimistic

18.If=0'找不到,增加一条空记录

19.For j=1To

20.(j-1)=Cells(i,j).Value

21.Next j

22.

23.Next i

24.'关闭记录集

25.Set rst=Nothing'释放对象

26.'关闭连接

27.Set cnn=Nothing'释放对象

28.MsgBox"操作成功!"

29.EndSub

3、连接Excel工作表

?连接Excel,注意连接串(增加一个ExtendedProperties=)和SQL语句的写法:

[vb]

1.'连接Excel工作表

2.Subado_test4()

3.Dim cnn As

4.Dim rst As

5.Dim sqls AsString

6.'建立连接,注意连接串和SQL语句的写法

7.Set cnn=New

8.With cnn

9..Provider=

10..Open&"\"

11.EndWith

12.'使用SQL语句操作数据库

13.sqls="select*from[sheet1$]"

14.Set rst=(sqls)

15.Sheets("sheet6").Range("A1").CopyFromRecordsetrst

16.'关闭记录集

17.Set rst=Nothing'释放对象

18.'关闭连接

19.Set cnn=Nothing'释放对象

20.MsgBox"操作成功!"

21.EndSub

?同时连接Excel和Access数据库,主要看连接串和SQL语句的写法:[vb]

1.'连接Excel工作表和Access数据库

2.Sub ado_test5()

3.Dim cnn As

4.Dim rst As

5.Dim sqls AsString

6.'建立连接,注意连接串和SQL语句的写法

7.Set cnn=New

8.With cnn

9..Provider=

10..Open

11.EndWith

12.'使用SQL语句操作数据库

13.sqls="selecta.部门,count(*)from[部门$A:A]aleftjoin[database="&_

14.&"\员工.accdb].职工bona.部门=b.部门groupbya.部门"

15.Set rst=(sqls)

16.Sheets("部门").Range("b2").CopyFromRecordsetrst

17.'关闭记录集

18.Set rst=Nothing'释放对象

19.'关闭连接

20.Set cnn=Nothing'释放对象

21.MsgBox"操作成功!"

22.EndSub

4、注意事项

?关于ADO控件,有两种创建方式,一种是如前述的那样,先加引用,然后在代码中就可以定义这种类型的对象,再通过New的方式建立对象。另一种方式直接创建,代码如下:

DimcnnAsObject,rstAsObject

Setcnn=CreateObject("")

Setrst=CreateObject("")

其实这种方法更实用,因为加引用必须是熟悉系统的人才能操作,如果将写好的程序给一般人使用,难道每次你还指导他去加引用

?执行SQL语句有三种方式,一种是用connection,即上面的,这种方式比较适合无返回记录的语句,即DML语句。如果执行有返回记录的SQL语句,也可以取到记录,只是RecordCount总是反馈-1。这种情况下可以根据判断有无查询结果,如果=true就表示查询结果为空。另一种方式是用RecordSet,即上面的,这个适合有返回记录的语句,即select语句,因为这种方式能够返回记录数RecordCount。当然还有第三种方式,就是用command,这个比较适合执行存储过程,因为这种方式可以传递参数。三种方式command方式功能最强,用起来也最麻烦,connection最弱,用起来也最简单。

?取值除了前面说的CopyFromRecordset,还可以用循环的方式逐个取值,例如:

[vb]

1.For i=1torst.RecordCount

2.For j=1To

3.Cells(i+1,j)=(j-1).Value

4.Next j

5.

6.Next i

?ADO也可也连接其他数据库,只是连接串不同,其它操作一样,例如Oracle,连接语句如下:

"Provider=msdaora;DataSource=dl580;UserId=username;Password=userpasswd;"

其中dl580是客户端配置的连接名称,后面是Oracle用户名和密码。

附录:SQL多表查询语句的写法

1、嵌套查询

嵌套查询是将一个SELECT语句包含在另一个SELECT语句的WHERE子句中,也称为子查询。子查询(内层查询)的结果用作建立其父查询(外层查询)的条件,因此,子查询的结果必须有确定的值。利用嵌套查询可以将几个简单查询组成一个复杂查询,从而增强SQL的查询能力。

1、查询“张三”选修的课程和成绩

select学号,课程,成绩from[课程$]where学号=(select学号from[学生$]where姓名="张三")

2、查询“张三”选修的语文课和成绩

select学号,课程,成绩from[课程$]where学号=(select学号from[学生$]where姓名="张三"and课程="语文")

3、查询所有考试学生的成绩

select*FROM[课程$]where成绩notin(selectdistinct学号from[学生$])

2、合并查询

合并查询想必大家都知道了,数据透视表多表查询,一般都使用的是合并查询,它合并的是两个或两个以上查询的结果。参加合并查询的列数要相同,对应列的数据类型必须兼容,各语句中对应的结果集列出现的顺序必须相同。

与连接查询相比,联合查询增加记录的行数,连接查询则是增加记录的列数。联合查询语句如下:

select*from[]union[all]

其中ALL选项保留结果集中的重复记录,默认时系统自动删除记录。如,依据学号查询语文和物理成绩:select学号,成绩,课程from[课程$]where课程="语文"unionselect学号,成绩,课程from[课程$]where课程="物理"

3、多表查询

多表查询亦称连接查询,它同时涉及两个或两个以上的公共字段或语义相同的字段,也就是说数据表是通过表的列(字段)来体现的。是数据透视表中最重要的的一种查询。连接操作的目的就是通过加在连接字段的条件将多个表连接在一起,以便在多个表中查询数据。

多表查询,需要有相同的两个表的联接条件,该条件放在WHERE子句中,格式为:

select<目标列>from<表明1>,<表名2>where<表名1>.<字段名1>=<表名2>.<字段名2>

1、依据学号条件查询学生的各门成绩:

select*from[学生$],[课程$]where[学生$].学号=[课程$].学号

为了简化输入,在SELECT命令中允许使用表的别名。为此,可以在FROM子句中定义一个临时别名,以便查询使用。其格式如下:

SELECT<目标列>FROM<表名1><别名1>,<表名2><别名2>WHERE<别名1><字段名1>=<别名2>.<字段名2>

2、依据学号条件查询学生的各门成绩大于85分

selectkc.学号,姓名,课程,成绩from[学生$]xs,[课程$]kcwherexs.学号=kc.学号and成绩>85

在数据透视表中对多表查询,还可以使用另一种连接格式,就是内连接查询,也叫等值连接查询。它是组合两个(或多个以上)表,最常使用的方法。其语句如下:

SELECT<目标列>FROM<表名1>innerjoin<表名2>on<表名1>.<字段名1>=<表名2>.<字段名2>

3、依据学号条件查询学生的各门成绩大于85分

selectkc.学号,姓名,课程,成绩from[学生$]xsinnerjoin[课程$]kconxs.学号=kc.学号

4、外连接查询

在内连接查询中,只有在两表中同时匹配的行才才能在结果集中选出,而在外连接中可以只限制一个表,而不限制另一个表,其所有的行都都出现在结果集中。外连接分为左外连接,右外连接和全部链接。

左连接是对连接条件中左边的表不加限制;右连接是对右边的表不加限制;全部连接是对两个表都不加限制。其语法如下:

select<选择列数>from<表名1><[lift︳right︳full][outer]>jion<表名2>on<表名1>.<列名>=<表名2>.<列名> 1、以[学生$]中记录为准,[课程$]中不存在的学号也可以列出:

selectkc.学号,姓名,课程,成绩from[学生$]xsleftjoin[课程$]kconxs.学号=kc.学号

2、以[课程$]中记录为准,[学生$]中不存在的学号也可以列出:

selectkc.学号,姓名,课程,成绩from[学生$]xsrightjoin[课程$]kconxs.学号=kc.学号

把EXCEL表的数据导入到SQL数据库

如何成功把EXCEL表的数据导入到SQL数据库,代码如何编写 唯一下载软件下载,软件,下载,共享,共享软件,免费,免费软件,汉化,汉化补丁,游戏,游戏下载,软件教程,软件新闻,软件资讯,操作系统,邮件. 如何成功把EXCEL表的数据导入到SQL数据库,代码如何编 写· https://www.sodocs.net/doc/a815570086.html,/jasoncheung/archive/2005/01/07/243624.aspx /*=================== 导入/导出Excel的基本方法===================*/ 从Excel 文件中,导入数据到SQL数据库中,很简单, ... 如何成功把EXCEL表的数据导入到SQL数据库,代码如何编写. 摘要:如何成功把EXCEL表的数据导入到SQL数据库,代码如何编写――点击此处阅读全文. 发表于@ 2006年04月05日11:21:00 | 评论(loading...) Powered by: Copyright ? gjcxywwx. DTS 能从文本文件或OLE DB 数据源(例如,Microsoft Access 2000 数据库)将数据导入到SQL Server 中。或者,也可以从SQL Server 将数据导出到OLE DB ...用DTS是肯定可以的,而且可以自动生成VB代码。我也不知道如何用SQL语句实现,关注!!!Top ... 例如:导入和导出数据。DTS 能从文本文件或OLE DB 数据源(例如,Microsoft Access 2000 数据库)将数据导入到SQL Server 中。或者,也可以从SQL Server 将数据...用DTS是肯定可以的,而且可以自动生成VB代码。我也不知道如何用SQL语句实现,关注!... ... gjcxywwx 2006-06-19T10:26:00Z VB操作LotusNotes数据库Wed, 24 May 2006 04:07:00 +0800 ... gjcxywwx 2006-04-05T11:28:00Z 如何成功把EXCEL表的数据导入到SQL数据库,代码如何编写Wed, 05 Apr 2006 19:21:00 +0800 ... 如何成功把EXCEL表的数据导入到SQL数据库,代码如何编写. 导出表中的数据到Excel,包含字段名,文件为真正的Excel文件,如果文件不存在,将自动创建文件,如果表不存在,将自动创建表基于通用性考虑,仅支持导出标准数据类型--邹建2003.10--*/导出查询中的数据...

SQL Server数据与Excel表的导入导出

几乎所有的数据库管理者或者是与数据库打过交道的朋友,几乎都或多或少的了解并使用过数据导入导出的功能以便完成支持诸如数据合并、归档和分析等任务,以及开发应用程序或升级数据库或服务器,而这一切的便利都已经被SQL Server中的数据转换服务(DTS)囊括其中,它提供了一套图形化工具和可编程对象,以帮助管理员和开发人员和需要进行数据维护的人员解决数据移动问题,其中包括将数据从分散的数据源中提取出来,并且转换、合并到一个或多个目标位置。可以将任务组、工作流操作以及约束条件收集起来形成DTS软件包,然后安排它定期运行或在某些事件发生后运行。 首先我们来先认识一下什么是DTS,它是一组工具,用于在一个或多个数据源(如Microsoft SQL Server、Microsoft Excel或Microsoft Access)间导入、导出和转换各种数据。通过OLE DB(一种数据访问的开放式标准)提供连接,通过用于ODBC的OLE DB提供程序来支持ODBC(开放式数据库连接)数据源。 在这里我们将以具体的实例来介绍DTS数据的导入导出功能。例:使用DTS向导导出自己建立的dmtjxxb数据库中的dmtjxxb_register表,到Excel表中。 操作步骤为: (1)启动SQL Server企业管理器(Enterprise Manager)后,点击SQL Server组,选择 指定的服务器,如此次操作的数据库是我本地的数据库,如图:

SQL Server企业管理器

本地数据库 选中要导出的数据库名称,点击鼠标右键,在弹出的菜单点击“所有任务”选择“导出数据”选项,如下图所示,就会弹出数据导入导出向导。 (2)单击“下一步”按钮,打开选择数据源对话框,如下图所示:

将EXCEL导入SQL表

将EXCEL表导入SQL表 医院在正式使用软件之前,需要将药品、收费项目等进行集中录入。这是一件基础工作,工作量大。如果能够先将药品、收费项目输入到EXCEL表中,再直接导入我们的软件,这样可以加快录入速度。 从EXCEL中导入数据到SQL中,操作步骤如下: 一、准备阶段(主要是为药品或者项目生成六位数的字母编码。): 首行,需要在EXCEL中增加一列,为药品生成编码。软件默认的编码格式为六位字母。1、人工录入完成的EXCEL表样式: 请将第一行中的编码、名称、处方单位等中文改成对应的拼音字母: 编码(bm)、药品名称(mc)、处方单位(dw)、整量单位(kxdw)、换算系数(xs)、规格(ggxh)、零售价(lsj)、药品分类(zxfl) 1、这时,编码(bm)列为空,在灵图医院软件中,药品的编码格式为六位字母,如AAAABA、AAAABB 等,但如何能够按顺序生成这样的编码呢?操作步骤如下: A、依次点工具-宏-visaul basic 编辑器,新弹出窗口如下:

B、在左边的对象上,右键,选择“导入文件…”,在文件选择路径中,找到医院软件目录中的bm.bas 文件,确定。 C、这时,在“模块”下方将增加“自动编码”模块, D、关掉本窗口,返回到EXCEL窗口 2、在表的A2单元格中输入编码:AAAABA 3、选中A3单元格,在上面的公式条中输入=GETNEXTBM(A2),回车确认,则A3单元格中的值自 动生成为:AAAABB 4、选中A3单元格,往下拉,所有的编码将自动生成。 二、将EXCEL表导入SQL表 1、依次打开SQL的企业管理器-数据库-表,如图:

通过ODBC直接读、写Excel表格文件

想要通过ODBC直接读、写Excel表格文件,首先,应确保ODBC中已安装有Excel表格文件的驱动"MICROSOFT EXCEL DRIVER (*.XLS)"。然后,可根据下面步骤进行:1. 在StdAfx.h文件中加入:include include 2. 通过ODBC直接创建Excel文件(暂定文件名:Demo.xls) //创建并写入Excel文件void CRWExcel::WriteToExcel() { CDatabase database; CStringsDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动CStringsExcelFile = "c:\\demo.xls"; // 要建立的Excel文件CStringsSql; TRY { // 创建进行存取的字符串sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\" ;DBQ=%s",sDriver, sExcelFile, sExcelFile); // 创建数据库(既Excel表格文件) if( database.OpenEx(sSql,CDatabase::noOdbcDialog) ) { // 创建表结构(姓名、年龄) sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)"; database.ExecuteSQL(sSql); // 插入数值sSql = "INSERT INTO demo (Name,Age) VALUES ('徐景周',26)"; database.ExecuteSQL(sSql); sSql = "INSERT INTO demo (Name,Age) VALUES ('徐志慧',22)"; database.ExecuteSQL(sSql); sSql = "INSERT INTO demo (Name,Age) VALUES ('郭徽',27)"; database.ExecuteSQL(sSql); } // 关闭数据库database.Close(); } CATCH_ALL(e) { Excel学习教程Excel介绍Excel教程Excel 表格Excel函数Excel图表TRACE1("Excel驱动没有安装: %s",sDriver); } END_CATCH_ALL; } 3. 通过ODBC直接读取Excel文件(暂定文件名:Demo.xls) // 读取Excel文件void CRWExcel::ReadFromExcel() { CDatabase database; CStringsSql; CString sItem1, sItem2; CStringsDriver; CStringsDsn; CStringsFile = "Demo.xls"; // 将被读取的Excel文件名// 检索是否安装有Excel驱动"Microsoft Excel Driver (*.xls)" sDriver = GetExcelDriver(); if (sDriver.IsEmpty()) { // 没有发现Excel驱动AfxMessageBox("没有安装Excel驱动!"); return; } // 创建进行存取的字符串sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", sDriver, sFile); TRY { // 打开数据库(既Excel文件) database.Open(NULL, false, false, sDsn); CRecordsetrecset(&database); // 设置读取的查询语句. sSql = "SELECT Name, Age " "FROM demo " "ORDER BY Name "; // 执行查询语句recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly); // 获取查询结果while (!recset.IsEOF()) { //读取Excel内部数值recset.GetFieldValue("Name ", sItem1); recset.GetFieldValue("Age", sItem2); // 移到下一行recset.MoveNext(); } // 关闭数据库database.Close(); } CATCH(CDBException, e) { // 数据库操作产生异常时... AfxMessageBox("数据库错误: " + e->m_strError); } END_CATCH; } // 获取ODBC中Excel驱动CStringCRWExcel::GetExcelDriver() { char szBuf[2001]; WORD cbBufMax = 2000; WORD cbBufOut; char *pszBuf = szBuf; CStringsDriver; // 获取已安装驱动的名称(涵数在odbcinst.h里) if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut)) return ""; // 检索已安装的驱动是否有Excel... do { if (strstr(pszBuf, "Excel") != 0) { //发现! sDriver = CString(pszBuf); break; } pszBuf = strchr(pszBuf, '\0') + 1; } while (pszBuf[1] != '\0'); return sDriver; }

人事必备:用EXCEL表轻松建立人事数据库

轻松运用EXCEL建立人事信息库 接下来请您不要急着录入人员信息,我们要对一些信息项进行函数设置,以便系统可以自动生成相关信息,这会使我们的工作产生事半功倍的效果。 1、性别、出生月日、年龄的自动填充功能设置 我们先对“性别”“出生年月”“年龄”进行函数设置。当我们输入某人身份证号码时,系统便会自动生成“性别”,“出生年月”及“年龄”,这样就减少了我们录入的工作量。请分别选择性别、出生月日、年龄信息项单元格输入下列公式: (1)性别: =IF(MOD(IF(LEN(E3)=15,MID(E3,15,1),MID(E3,17,1)),2)=1,"男","女") 含义:“LEN(E3)=15”表示看E3中是否有15个字符; “MID(E3,15,1)”表示在E3中从第15位开始提取1位字符; “MOD(MID(),2)=1”表示提取的字符除以2余数为1; “IF(LEN(E3)=15,MID(E3,15,1),MID(E3,17,1)”表示看E3中是否够15个字符,如果够就从第15个字符开始取1个字符,如果不够15个字符就从第17个字符开始取1个字符。我们的身份证号码一般是15位或18位。 “IF(MOD(IF(LEN(E3)=15,MID(E3,15,1),MID(E3,17,1)),2)=1,"男","女"”表示所取字符除以2如果余数为1显示男,否则显示女。 (2)出生年月: =DATE(MID(E3,7,4),MID(E3,11,2),MID(E3,13,2)) 含义:DATE(YEAR,MONTH,DAY); “MID(E3,7,4)”表示在E3中从第7个字符开始连续取4个字符表示年,用类似的表示方法一个人的出生年月日便可以通过函数设置表示出来,如果为了看起来方便,我们可以将单元格格式设置成年、月、日的日期格式,这样显示的结果会非常容易理解。 (3)年龄: =DATEDIF(G3,TODAY(),"Y") 含义:“DATEDIF(date1,date2,“Y”)”表示两个日期的差值; “TODAY()”表示系统自带的日期即显示当日日期; “DATEDIF(G3,TODAY(),"Y")”表示今天的日期与G3所表示的出生月日之间的年份差值,这样一个人的年龄就会容易的显示出来了。 2、劳动合同期限的自动生成和提前30天定期提醒功能设置 劳动合同管理也是人事管理中不可缺少的一部分,特别是劳动合同到期续签问题更是不可忽视。如果由于我们的人为原因造成了劳动合同漏签、延期签订等问题可能会给公司以及员工个人带来一定的损失。从一个人入职签订试用期合同开始,再到签订正式劳动合同以及后来的续签劳动合同,一系列的日期如何能够让系统自动生成,并且形成系统提前30天自动提醒我们的功能呢?这需要对一些信息项进行函数设置。如图(二)所示:

利用SQL Server的DTS操作EXCEL、Access等数据表的导入导出

利用SQL Server的DTS操作EXCEL、Access等数据表的导入导出- - 熟悉SQL SERVER 2000的数据库管理员都知道,其DTS可以进行数据的导入导出,其实,我们也可以使用Transact-SQL语句进行导入导出操作。在Transact-SQL语句中,我们主要使用OpenDataSource 函数、OPENROWSET 函数,关于函数的详细说明,请参考SQL联机帮助。利用下述方法,可以十分容易地实现SQL SERVER、ACCESS、EXCEL数据转换,详细说明如下: 一、SQL SERVER 和ACCESS的数据导入导出 常规的数据导入导出: 使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤: 1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation 2Services(数据转换服务),然后选择czdImport Data(导入数据)。 3在Choose a Data Source(选择数据源)对话框中选择Microsoft Access as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。 4在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider for SQL Server,选择数据库服务器,然后单击必要的验证方式。 5在Specify Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables(复制表格)。 6在Select Source Tables(选择源表格)对话框中,单击Select All(全部选定)。下一步,完成。 Transact-SQL语句进行导入导出: 1. 在SQL SERVER里查询access数据: -- ====================================================== SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

用sql直接操作excel表

用sql直接操作excel表 start from 李孟尝 INSERT INTO OutputCane(ctime,outvalue,area,vid,ctimeint) Select ctime,buyprice as outvalue,area,vid,left(ctime,4) as ctimeint From OpenRowSet('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=E:\workspace\brk\table_20100816\InsertGj.xls' , 'select * from [巴西甘蔗产量$]') end from 直接操作excel select b.时间as etime ,广州as value ,a.id as areaid , 3 as varid from QH_Area a, OpenRowSet('Microsoft. Jet.OLEDB.4.0','Excel 8.0;Database=D:/xitong/糖现货价格.xls','select * from [Sheet1$] where 广州is not null ') b where https://www.sodocs.net/doc/a815570086.html,='广州' --配置权限 EXEC sp_configure 'show advanced options', 1; GO RECONFIGURE; GO EXEC sp_configure 'Ad Hoc Distributed Queries', 1; GO RECONFIGURE; GO SQL SERVER 和EXCEL的数据导入导出 1、在SQL SERVER里查询Excel数据: -- ====================================================== SELECT* FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 下面是个查询的示例,它通过用于Jet 的OLE DB 提供程序查询Excel 电子表格。 SELECT* FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactio ns ------------------------------------------------------------------------------------------------- 2、将Excel的数据导入SQL server : -- ====================================================== SELECT*into newtable FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

C#中数据库数据如何导出至Excel表格

C#中数据库数据如何导出至Excel表格 有时候需要将数据库的数据导出至Excel表格表格,以便进行查看和分析,那么如何导出呢?下面用代码来实现。 首先,新建一个工程,需要添加引用Microsoft.Office.Interop.Excel.dll,以Oracle数据 库为例(只要读出DataTable或DataSet就行了,哪种数据库没关系)。 1、创建一个表格,并插入如下数据。 [sql]view plaincopyprint? 1.drop table TABLETESTEXCEL; 2.create table TABLETESTEXCEL 3.( 4. col_id NUMBER not null, 5. col_name VARCHAR2(32), 6. col_age NUMBER, 7. col_sex VARCHAR2(4), 8. col_work VARCHAR2(32), 9. col_mony FLOAT 10.); 数据: [sql]view plaincopyprint? 1.insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony) 2.values (1, '吴一', 25, '男', '.NET', 5000); 3. 4.insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony) 5.values (2, '孙二', 24, '男', 'JAVA', 4999); 6. 7.insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony) 8.values (3, '张三', 25, '男', 'PHP', 5001);

SQL在Excel中的应用方法

iamlaosng文 Excel中使用SQL的主要目的是连接(或Excel工作表)导入数据或者对这些数据进行统计汇总,要达到这个目的,需要好好学习SQL语句的使用。本文主要说明在Excel中如何使用SQL,至于SQL语句本身就不多作介绍了。 一、简单的查询 1、建立查询 数据选项卡—现有连接—浏览更多或者按快捷键Alt+D+D+D 选择要查询的Excel文件和文件中的的工作表,就可以将相应工作表的数据取过来。表现形式可以是表,也可以是数据透视表等。 2、SQL查询语句 如果是挑选部分列数据,就需要用SQL语句(取所有数据也可以用SQL语句)。 建立查询时,选择工作表后不要点击“确定”按钮,而是先点击“属性”按钮,弹出窗口中选择“定义”选项卡,在命令文本框中输入SQL查询语句(原来的工作表名称,表示所有数据,可以认为是取所有数据的SQL的一种特殊写法): Select 字段列表 from [工作表名$] --其中字段列表就是需要选择的字段,数据源用工作表名称加“$“再用中括号括起来,例如: select prov_name, city_name, xs_mc, xs_code from [Sheet1$] select * from [Sheet1$]-- 取所有数据 偶然发现,字段名不能用no,估计是保留字,如需要,用中括号括起来,例如:select [no],prov_name,city_name, xs_mc, xs_code from [Sheet1$]

字段名中含有特殊字符的也要用中括号括起来,如/ 空格等 Excel查询没有伪表概念,对于表达式的计算直接用select既可,例如 Select 23+45 -- 返回68 Select date() -- 返回当前日期 3、修改查询语句 方法:点击右键—弹出菜单—表格—编辑查询 通过修改SQL语句可以变更所取的数据,也可以将建立查询时的简单SQL语句改成复杂的SQL语句。 字段名更换:如果想换个字段名,用“as 新字段名”既可,例如: select prov_name as 省, city_name as 城市, xs_mc as 县市, xs_code as 编码 from [Sheet1$] 非正常表格:数据区域(含字段名)不在第一行 需要在工作表名称后面指定数据范围,例如: select prov_name, city_name, xs_mc, xs_code from [Sheet1$B2:G2000] 或者,将数据块定义为一个名称,假设定义为mydata,SQL语句如下: select prov_name, city_name, xs_mc, xs_code from mydata 注意:使用名称时没有$符号,也没有方括号了。 数据更新:数据源发生变化,需要更新数据,方法:点击右键—弹出菜单—刷新 意外:如果打开Excel文件后弹出不是选择工作表的窗口而是一个“数据连接属性” 窗口,可以关闭这个窗口,然后将Excel应用极小化再极大化方式消除,或者在弹 出选择文件的窗口时,退回上一级文件夹,删除那个Queries文件夹,就行了。

SQL Server表与Excel互导

SQL Server表与Excel、Access数据互导 最近看到很多朋友在论坛上问SQL Server表与Excel、Access数据互导的问题,问题很简单,也很早就有人专门写文章讨论过这个问题,但看了那些文章,也没几个人讲得很明白,都是些很笼统的格式,估计初学者会被那些答案弄得稀里糊涂,更别说能学到新的东西。 基于这个原因,下面我将详细的讲解互导的过程,当然,常规的在SQL Server 管理器中得用向导互导的过程我就不多讲了,下面讲的都是直接用T-SQL语句来实现的。 1、SQL Server导出为Excel: 要用T-SQL语句直接导出至Excel工作薄,就不得不用借用SQL Server管理器的一个扩展存储过程:xp_cmdshell,此过程的作用为“以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出。”下面为定义示例: EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Book3.xls -c -q -S"s ervername" -U"sa" -P""' --参数:S 是SQL服务器名;U是用户名;P是密码,没有就空着 --说明:其实用这个过程导出的格式实质上就是文本格式的,不信的话在导出的Exc el表中改动一下再保存看看。 实际例子与说明如下: /*如果要将表整个导出至Excel的话*/ EXEC master..xp_cmdshell 'bcp northwind.dbo.orders out c:\Book1.xls -c -q -S"(local)" -U"sa" -P""' --注意句中的northwind.dbo.orders,为数据库名+拥有者+表名 --直接导出用“out”关健字

SQL操作EXCEL

SQL操作EXCEL 直接操作excel(查询Excel导入SQL) 1)SELECT*INTO dbo.Table_1FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source=C:\test\xltest.xls;Extended Properties=Excel 8.0')...[Customers$] 2)SELECT*INTO dbo.Table_1FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel8.0;Database=C:\test\xltest.xls',[Customers$]) 3)SELECT*INTO dbo.Table_1FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel8.0;Database=C:\test\xltest.xls','SELECT*FROM [Customers$]') 例: --表存在 insert into dbo.Table_1(num) select*from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel5.0;HDR=yes; DataBase=E:\1.xls',sheet1$) --表不存在 select*into dbo.Table_1from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=yes;DataBase=E:\1.xls',sheet1$) 问题: SQL Server阻止了对组件'Ad Hoc Distributed Queries'的STATEMENT'OpenRows et/OpenDatasource'的访问 --使用前开启Ad Hoc Distributed Queries: exec sp_configure'show advanced options',1 reconfigure RECONFIGURE; GO exec sp_configure'Ad Hoc Distributed Queries',1 reconfigure

SQL在Excel中的应用方法

S Q L在E x c e l中的应用方法 (总17页) -CAL-FENGHAI.-(YICAI)-Company One1 -CAL-本页仅作为文档封面,使用请直接删除

SQL在Excel中的应用方法 iamlaosng文 Excel中使用SQL的主要目的是连接数据库(或Excel工作表)导入数据或者对这些数据进行统计汇总,要达到这个目的,需要好好学习SQL语句的使用。本文主要说明在Excel中如何使用SQL,至于SQL语句本身就不多作介绍了。 一、简单的查询 1、建立查询 数据选项卡—现有连接—浏览更多或者按快捷键Alt+D+D+D 选择要查询的Excel文件和文件中的的工作表,就可以将相应工作表的数据取过来。表现形式可以是表,也可以是数据透视表等。 2、SQL查询语句 如果是挑选部分列数据,就需要用SQL语句(取所有数据也可以用SQL语句)。 建立查询时,选择工作表后不要点击“确定”按钮,而是先点击“属性”按钮,弹出窗口中选择“定义”选项卡,在命令文本框中输入SQL查询语句(原来的工作表名称,表示所有数据,可以认为是取所有数据的SQL的一种特殊写法): Select 字段列表 from [工作表名$] --其中字段列表就是需要选择的字段,数据源用工作表名称加“$“再用中括号括起来,例如: select prov_name, city_name, xs_mc, xs_code from [Sheet1$] select * from [Sheet1$] -- 取所有数据

偶然发现,字段名不能用no,估计是保留字,如需要,用中括号括起来,例如:select [no],prov_name,city_name, xs_mc, xs_code from [Sheet1$] 字段名中含有特殊字符的也要用中括号括起来,如/ 空格等 Excel查询没有伪表概念,对于表达式的计算直接用select既可,例如 Select 23+45 -- 返回68 Select date() -- 返回当前日期 3、修改查询语句 方法:点击右键—弹出菜单—表格—编辑查询 通过修改SQL语句可以变更所取的数据,也可以将建立查询时的简单SQL语句改成复杂的SQL语句。 字段名更换:如果想换个字段名,用“as 新字段名”既可,例如: select prov_name as 省, city_name as 城市, xs_mc as 县市, xs_code as 编码 from [Sheet1$]非正常表格:数据区域(含字段名)不在第一行 需要在工作表名称后面指定数据范围,例如: select prov_name, city_name, xs_mc, xs_code from [Sheet1$B2:G2000] 或者,将数据块定义为一个名称,假设定义为mydata,SQL语句如下: select prov_name, city_name, xs_mc, xs_code from mydata 注意:使用名称时没有$符号,也没有方括号了。 数据更新:数据源发生变化,需要更新数据,方法:点击右键—弹出菜单—刷新 意外:如果打开Excel文件后弹出不是选择工作表的窗口而是一个“数据连接属性” 窗口,可以关闭这个窗口,然后将Excel应用极小化再极大化方式消除,或者在弹出选择文件的窗口时,退回上一级文件夹,删除那个Queries文件夹,就行了。

怎样用SQL Server 2008 SQL语句将Excel数据导入到数据库里指定的表里面

怎样用SQL Server 2008 SQL语句将Excel数据导入到数据库里指定的表里面2011-12-29 20:58:17 分类:数据库开发技术 怎样用SQL Server 2008 SQL语句将Excel数据导入到数据库里指定的表里面?在查询分析器里,直接写 SQL语句: 如果是导入数据到现有表,则采用形式 INSERT INTO 表 SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) 如果是导入数据并新增表,则采用形式 SELECT * INTO 表 FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) 以上语句是将 EXCEL文件里 SHEET1工作表中所有的列都读进来。 如果只想导部分列,可以 INSERT INTO 表 (a1,a2,a3) SELECT a1,a2,a3 FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) 其实可以将 OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) 当成一个表,例如我就写过这样一个句子: INSERT INTO eval_channel_employee(channel,employee_id) SELECT CASE a.渠道 WHEN 'DIY' THEN 1 WHEN 'RDC' THEN 0 WHEN 'KCM' THEN 2 ELSE 3 END ,b.id FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\temp\name.xls',sheet1$) AS a,pers_employee b WHERE a.员工编码 =b.code 简单的方法: SQL2005中直接可以实现导入功能 SQL2008不知道可不可以。操作过程如下:第一步:登录到 SQL Server Management Studio

Excel数据库创建和调用

Excel数据库 一,Excel数据库创建方法 1,首先新建一个Excel表格(如图1)。 (图1) 2,在新建Microsoft Excel 工作表中输入要编辑的内容。(如图2) (图2) 注:表格中的照片一列的内容是照片存储位置的文件名;创建数据库时,所要调用的照片必需放在同一个文件夹中,且图片的后缀要统一为JPG、BMP、PCX或TIF中的一个。最好将照片尺寸也统一。

3, 选中所编辑的内容,在名称框中输入数据库的名称并按回车键。(如图3) (图3) 注:在此把新建的数据库命名为“上海通睿商贸有限公司”。 4, 保存新建的新建 Microsoft Excel 工作表,数据库创建完成。 5, 如果是office2003或者以上版本: 名称框

输入数据库的名称,然 后点击“添加” 注意引用位置要把数据全部选中

二,编辑卡片,调用数据库数据 1,首先打开Card Five软件(如图4),中间为我们要编辑的卡面,编辑超过卡面的内容将不能打印出来。 (图4) 2,找到数据库连接…选项、或者工具条中的图标(如图5)。 添加数据库 (图5)

3,单击连接…选项,或者单击图标打开选择ODBC数据来源(添加数据文件)对话框。 (如图6) (图6) 4,选择Excel Files选项,单击下一步会弹出选择工作薄对话框。(如图7) (图7) 5,找到所要调用的新建Microsoft Excel 工作表.xls,单击确定后被调用的数据库“上海通睿商贸有限公司”会显示在列表中。(如图8)

(图8) 6,选择“上海通睿商贸有限公司”,单击完成后新建的Microsoft Excel 工作表的内容就会在Card Five软件右边的窗口显示出来。(如图9) (图9) 注:①查找记录在数据在它的字段; ②添加新的记录到数据库; ③删除记录从数据库; ④回到最前数据位置; ⑤回到最末数据位置; ⑥下一数据; ⑦前一数据; ⑧窗口右边灰色的数据可以直接拖动到窗口使用,而黑色的字符不能拖动,必需由Card Five软件自身编辑。 7,编辑卡片。(如图10)

SQL_Server数据与Excel表的导入导出

SQL Server与Excel的数据交换 几乎所有的数据库管理者或者是与数据库打过交道的朋友,几乎都或多或少的了解并使用过数据导入导出的功能以便完成支持诸如数据合并、归档和分析等任务,以及开发应用程序或升级数据库或服务器,而这一切的便利都已经被SQL Server中的数据转换服务(DTS)囊括其中,它提供了一套图形化工具和可编程对象,以帮助管理员和开发人员和需要进行数据维护的人员解决数据移动问题,其中包括将数据从分散的数据源中提取出来,并且转换、合并到一个或多个目标位置。可以将任务组、工作流操作以及约束条件收集起来形成DTS 软件包,然后安排它定期运行或在某些事件发生后运行。 首先我们来先认识一下什么是DTS,它是一组工具,用于在一个或多个数据源(如Microsoft SQL Server、Microsoft Excel或Microsoft Access)间导入、导出和转换各种数据。通过OLE DB(一种数据访问的开放式标准)提供连接,通过用于ODBC的OLE DB 提供程序来支持ODBC(开放式数据库连接)数据源。 在这里我们将以具体的实例来介绍DTS数据的导入导出功能。例:使用DTS向导导出自己建立的dmtjxxb数据库中的dmtjxxb_register表,到Excel表中。 操作步骤为: (1)启动SQL Server企业管理器(Enterprise Manager)后,点击SQL Server组,选择指定的服务器,如此次操作的数据库是我本地的数据库,如图:

SQL Server企业管理器

本地数据库 选中要导出的数据库名称,点击鼠标右键,在弹出的菜单点击“所有任务”选择“导出数据”选项,如下图所示,就会弹出数据导入导出向导。 (2)单击“下一步”按钮,打开选择数据源对话框,如下图所示:

通过SQL语句直接实现Excel与数据库的导入导出

通过SQL语句直接实现Excel与数据库的导入导出 导入/导出Excel 1.--从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句: /*===================================================================*/ --如果接受数据导入的表已经存在 insert into 表select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c: est.xls',sheet1$) --如果导入数据并生成表 select * into 表from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c: est.xls',sheet1$) /*===================================================================*/ 2.--从SQL数据库中,导出数据到Excel: --如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用: insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c: est.xls',sheet1$) select * from 表 --如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写: --导出表的情况 EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名out "c: est.xls" /c -/S"服务器名" /U"用户名" -P"密码"' --导出查询的情况 EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout "c: est.xls" /c -/S"服务器名" /U"用户名" -P"密码"' /*--说明: c:\test.xls 为导入/导出的Excel文件名. sheet1$ 为Excel文件的工作表名,一般要加上$才能正常使用. --*/ 3.--建立存储过程,导出真正的Excel文件(用此方法导出的Excel文件在用于导入时不会报错) --下面是导出真正Excel文件的方法:(请将一下所有代码复制到存储过程中) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

相关主题