sqlserver入门随堂笔记

sql server概述及应用

一.sql server常用工具介绍:

1. 企业管理器:

* sql server大管家,针对于数据库的所有内容做控制管理

* 包括数据库建立,数据表的建立,数据添加删除修改查看等

* 数据库安全管理,数据库访问控制等。

2. 查询分析器:

可执行任何的sql 语句,完成查询、添加、删除、修改等操作,并且可以通过语句控制管理

数据库以及数据表等

3. 服务管理器:

可以针对于 sql server服务 以及 sql server agent 服务进行控制管理,如

启动某一服务或停止某一服务。

4. 导入与导出数据:

将非sql server数据库中的数据,通过该工具与 sql server数据库实现转化。

5. 事件探查器:

探查器可以随时监控数据库服务器所发生的所有事件。包括哪个用户对哪个数据库及对象做出

何种操作。

探查器在工作时,会占用大量内存及cpu资源,因此建议不要长期运行,否则会影响服务器性能。

二. sql server 目录:

* sql server 程序目录 C:\Program Files\Microsoft SQL Server\MSSQL

* sql server 数据库目录 C:\Program Files\Microsoft SQL Server\MSSQL\Data

三. 在企业管理器中默认的六个数据库:

[master tempdb model msdb northwind pubs]

1. master数据库:

sql server核心数据库,用于保存整个sql server的所有配置,包括用户帐号、密码、

所有的数据库名称、字段、安全配置、以及与数据库有关的所有sql语句代码。

master数据库的各种操作,均由sql server 本身自行完成,用户不允许对其数据库做操作。

2. tempdb数据库:

临时数据库,用于临时存放数据,如针对数据库进行建立索引,或者复制数据库以及创建数据库

时,都需要借助临时数据库,进行数据临时存放.

临时数据库,不允许做对应的操作,而是由sql server 自行管理.

3. model数据库:

(模板数据库)

在建立一个新数据库时,必须由模板数据库提供最基本的结构以及基本的数据,并将这些

内容复制到新数据库中.因此一个新的数据库结构与模板数据库结构是一致.

4. msdb 数据库:

(分布式数据库)

sql server具备监控数据库服务器的功能,而所有的监控记录会保存在 msdb 数据库中.

5. northwind 与 pubs 数据库:

这两个数据库是sql server提供的实例,与系统无关.

四. sql server中数据库的对象:

[每建立一个数据库后,该数据库就自带多个对象]

1. 表 =>又称为数据表,数据库中所有的数据,均存放于数据表中. 又分为系统数据表与用户数据表

2. 关系图 =>用于指定两个数据表或多个数据表之间的关系.比如学员信息表与学员成绩表之间,应

该按照学员编号进行关联.

3. 视图 => 一段select 代码,用于查询指定的数据,只是将这一段代码用一个特定的名称表示而已

4. 存储过程 => 一段 sql 代码,用于完成sql server某项特定功能, 同时也可以由用户自行编写

新的存储过程. (存储过程即sql server中的子程序)

5. 规则 => 为数据表中的各字段添加指定的条件,以限制各字段数据输入的准确性.

6. 默认 => 当为数据表添加数据时,若没有为指定字段添加数据,则该字段会采用默认的数据填充.

7. 用户 => 针对于不同的数据库,指定不同的管理员,或者设置指定的用户允许访问特定的数据库以

及特定的数据库对象.

8. 角色 => 相当于服务器系统中的组,不同的角色有不同的权限,将用户添加到指定的角色,则该

用户就与该角色有相同的权限.

9. 自定义类型 =>用户自行创建对应的数据类型,可以将规则与默认也添加到自定义类型中

10. 自定义函数 =>用户自行创建函数,建立特定功能的函数.

五. 建立数据库的方法:

1. 认识数据库对应的文件:

MDF =>数据库的主文件, 每个数据库必须有该文件,而且只有一个.

NDF =>当数据库过大时,会导致主数据库文件过大,影响数据库的存取速度,因此可以

增加辅数据库文件,用于分摊整个数据库的数据,提高访问速度.

辅数据库文件允许存在多个,也可以没有.

LDF => 事务文件,用于存放数据库的运行情况以及错误信息等.

2. 建立数据库方法:

在企业管理器中,选择

指出数据库的名称,是否要采用辅数据库文件,以及数据库的容量增长方式.

还有数据库的最大值.

六.创建数据表:

1.数据表中各字段的数据类型:

[字符型,数字型,日期型,货币型,二进制类型,位类型,国际字符类型]

. 字符型:

* char 型 ==>定长型字符串类型 最大长度为 8000

* varchar 型 ==>变长型字符串类型 最大长度为 8000

* text 型 ==>文本型数据类型(变长) 最大长度为 2^31

. 数字型:

* bigint型 =>大整数类型 -2^31 ~ 2^31

* int 型 =>整数类型 -2^16 ~ 2^16

* smallint 型 =>小整数类型 -32768 ~ 32767

* tinyint 型 =>微整数类型 0 ~ 255

* float 型 =>浮点型(小数)

* real 型 =>实型(小数)

* numeric 型 =>数值型(小数)

. 日期型:

* datetime 型 =>日期时间型 1753-1-1 ~ 9999-12-31 ,精确到1/300秒

* smalldatetime 型 =>小日期时间型 1900-1-1 ~ 2079-6-6 ,精确到分钟

. 货币型:

* money 型 => -2^63 ~ 2^63 , 精确到 万分位

* smallmoney 型 -2^31 ~ 2^31 ,精确到万分位

. 二进制数据类型

* binary 型 => 定长二进制类型 ,最大长度为 8000

* varbinary 型 => 变长二进制类型, 最大长度为 8000

* image类型 =>变长大二进制 ,最大长度为 2^31

. bit 位类型:

位类型,即数据只允许是 0 或 1 两个.

当输入0以外的其他值时,均看作 1

bit 类型,通常用作 逻辑类型, 表示 是 / 否

. unicode 类型

[用于国际上非英语语言]

* nchar 型 => 定长型 最多为 4000个字符

* nvarchar 型 =>变长型 最多为 4000个字符

* ntext 型 =>变长型, 最多为 2^30 个字符

2. 建立数据表的方法:

打开企业管理器|数据库|表,右键打开,选择

在窗口中,指出各字段,以及字段对应的数据类型

注意: 数据表中,应指定一个具体的字段为 主键

对于编号的字段,可以设定为自动编号 (标识)

对于字段不允许为空的, 应该选中

七. asp连接sql server 的方法:

db.open

其中 server 表示服务器IP地址

database 表示要连接的数据库

uid 表示连接时的帐号

pwd 表示连接时的密码

driver 表示连接时所使用的驱动程序

sql 语句具体用法

一.sql 介绍:

sql 称为结构化查询语言,是所有关系型数据库的标准.

该语言查询及操作时,完全面向结果,即用户只需要提出需求,则

sql 语句就可以立刻返回对应的结果,而具体的过程则无需关心.

sql server中所提供的查询分析器,可以执行各种sql 语句,同时查询分析器还具备

采用sql 语句实现代码编写,即sql server 二次开发.

sql server 所提供的sql 语句,称为 T-sql 或交互式sql 语句.

sql server 可以提供 select 语句,delete语句,update语句,insert语句等

二. select 语句用法:

1.采用select语句,查询整个数据表

select * from xyxx

注意: * 表示所有字段

2.查询指定的数据表字段

select xh,xm,xb,nl,zy from xyxx

注意: 只查询五个字段的数据

3.查询指定的数据表字段,并且别名表示字段名

select xh as 学号,xm as 姓名,zy as 专业 from xyxx

注意: 查询了三个字段,用学号表示xh,用姓名表示xm,用专业表示zy

4.查询数据表的前N条数据记录

select top 10 * from xyxx

注意: top 10 表示取出数据表的前 10 条记录

select top 10 * from xyxx order by shf desc

5.显示某一个字段中不重复的所有数据:

[显示出全班的同学分别来自哪些地区]

select distinct 字段名 from xyxx

select distinct dz from xyxx

6.select 语句中的统计函数:

[相关的统计函数包括 sum avg max min count ]

select avg(yw) as 语文平均分 from xycj

select count(yw) as 语文及格人数 from xycj where yw>=60

select count(xh) as 全班总人数 from xycj

7. 按条件进行数据查询:

. 条件语句的格式:

select * from xyxx where 具体的条件

如 select * from xyxx where shf

select * from xyxx where zy='一年网络' and xb=1

[找出专业为一年网络并且是男同学]

. 采用 关键字 in 来表示条件所在的具体范围:

select * from xyxx where 具体条件

如 select * from xyxx where xh in (95003,95007,95008,95010)

说明: (95003,95007,95008,95010) 是一个集合.

而条件是判定 xh 在 上述的集合中.

. 采用 between 制定条件所在的范围:

如 select * from xyxx where nl between 16 and 33

其中 between 表示在....之间

上述的语句,表示查 nl 字段 在 16 到 33 之间的数据记录

. 采用模糊查询方式,进行数据搜索:

select * from xyxx where dz like '%西%'

其中 % 表示任意的字符

like 表示相似类似

select * from xx where xw like '%汽车%'

找出xw字段含有汽车两字的.

8. 数据排序:

按照某一个字段的升序或者降序 进行排列数据记录

select * from xyxx order by 字段 排序方式

说明: order 排序

by 按照

字段,即为要排序的依据

排序方式 asc -->升序,也是默认的方式

desc -->降序

select * from xyxx order by shf desc

select * from xyxx order by dz desc,xh desc ==>如果第一个排序字段相同,则采用第二个字段排序.

9. 字段组合:

select *,(yw+sx+yy+jsj+ty) as 总分,(yw+sx+yy+jsj+ty)/5 as 平均分

from xycj where (yw+sx+yy+jsj+ty)>=400 order by 总分 desc

例 select xh from xycj where (yw+sx+yy+jsj+ty)>=400

10. 数据分组查询:

[按照指定的字段进行分类]

select 分组的字段,统计函数 from 数据表 group by 分组字段

如 select xb,avg(shf) from xyxx group by xb ==>按性别进行分组,统计每组的平均生活费

select dz,avg(shf) from xyxx group by dz ==>按地区进行分组,统计每组的平均生活费

11. 分类汇总数据:

select * from xyxx order by xb compute avg(shf) by xb

分类汇总,即按照某一个字段进行分类, 同时将每一种进行汇总统计

[如 按地区进行分类,同时将每个地区的学员的平均年龄求解 ]

[分类汇总时,一定要注意在分类时一定要为分类的字段做排序操作,否则出错]

select * from xyxx order by dz compute avg(nl) by dz

12. 多表查询:

. 所要查询的数据,来自于多个数据表

[要查询所有同学的学员信息以及考试总分,这些信息分别来自于学员信息表与学员成绩表]

select * from xyxx,xycj ==>数据表1中的每一条记录都要与数据表2中所有记录对应

[该方式查询是错误的]

select * from xyxx,xycj where xyxx.xh=xycj.xh ==>在查询时,要找出数据表1中的

关联数据与数据表2中

的关联数据相对应

select xyxx.xh,xm,xb,(yw+sx+yy+jsj+ty) as zf from xyxx,xycj where xyxx.xh=xycj.xh and (yw+sx+yy+jsj+ty)>=400

. 通过多表子查询的方式,实现多表查询

select * from xyxx where xh in ===>找出学号在集合当中的信息

(

select xh from xycj where (yw+sx+yy+jsj+ty)>=400 ===>该语句产生了满足条件的所有学员

的学号,并形成一个学号集合

)

. 通过不存在性查询,实现不关联的数据查询

[如在学员信息表中存放全班所有学员的信息,但学员成绩表中会存在没有成绩的学员]

select * from xyxx where not exists

(

select * from xycj where xyxx.xh=xycj.xh

)

说明: select * from xyxx ===>找出xyxx表中所有数据

select * from xyxx,xycj where xyxx.xh=xycj.xh ===>多表查询后的结果(关联)

not exists ===>不存在性查询的关键字

注意: 不存在性查询的子语句 select * from xycj where xyxx.xh=xycj.xh ,不需要再指出xyxx 数据表

13. 通过selete语句,将select查询结果,保存为数据表

select * into lqxyb from xyxx where xh in (select xh from xycj where zf>=400)

三. insert 语句用法:

[insert 语句, 即向指定的数据表中,添加数据记录]

insert 语句的格式

insert into 数据表名(字段名1,字段名2,字段名3,...) values(数据1,数据2,数据3,...)

例:

insert into xyxx(xm,xb,nl,dz,rxrq,shf,zy) values('江民',1,50,'北京','2010-7-1',800,'一年网络')

四. update 语句用法:

[update语句,即用于对指定数据表做数据记录的修改]

update语句的格式

update 数据表名 set 字段名1=数据1,字段名2=数据2,字段名3=数据3... where 条件

在进行使用update语句时,一定要添加上 条件, 否则将会修改数据表中所有记录

例:

update xyxx set xm='王有民',nl=60,dz='上海',rxrq='2009-8-1' where xh=95025

五. delete 语句用法:

[delete语句,即用于对指定数据表中记录做删除操作]

delete语句的格式

delete from 数据表名 where 条件

在使用delete语句时,一定要添加 条件, 否则将删除数据表中所有记录

索引的应用

一.索引的介绍:

* 索引可以高效地快速地在大量数据记录中,找到所需要的数据.

[相当于书本的目录]

* 索引通常是针对于大型的数据表,以及记录数较多的场合下应用.

* 索引的建立是需要花费较多的计算机与服务器资源的.

当数据记录发生变化时或者数量发生变化时,索引必须要重新建立

二. 创建索引的注意事项:

* 数据表的记录数很少,通常不需要建立索引

* 不要为某一个数据量很少的字段建立索引,如 性别

* 不要为某一个数据量很大的字段建立索引,如 简介 或者 文章的内容

* 数据表的添加、删除、修改等操作远远大于查询操作,此时也不要建立索引

针对于学员信息表,可以为数据表中 学号 姓名 地址等建立索引

三. 索引的类型:

1. 按结构分类:

* 聚集索引

聚集索引,在数据表中,只允许有一个存在,通常是主键.

聚集索引建立后,会存在一个以主键为内容的小表,该小表的数据存放地址与原数据表完全相同

当查询时,找到小表中的数据,也就表示找到了原数据表中的数据记录.

* 非聚集索引

非聚集索引,在建立索引时,会产生一个小表,小表中存放建立索引的字段,以及对应

数据记录所在的存储地址。

当查询时,先在小表中找到数据,然后对应找到存储地址,最后通过存储地址,找到

原数据表中的数据记录。

2. 按索引唯一性分:

* 唯一性索引 => 建立索引的字段是唯一的

* 非唯一性索引 =>建立索引的字段不唯一

四. 索引创建方法:

打开数据表的设计窗口,右键打开选择

* 如果数据表已经有了主键,则会自动存在一个 聚集索引与唯一性索引

* 若要为其它字段建立索引,如 姓名,可以单击

,并指出是否为聚集索引(如果有了主键,则不能再建立聚集索引)

指出是否为唯一性索引,(如果该字段存在相同的数据,则也不能建立唯一性索引).

* 通常不能建立聚集索引与唯一性索性,则该索引称为非聚集非唯一性索引。

五. 索引的管理:

在企业管理器的数据表上,右键打开“所有任务|管理索引”

可查看到数据表中所建立的所有索引,包括建立的字段名与类型。

若要修改索引,则直接单击“编辑”按钮即可.

注:

数据表建立了索引后,可以在对大量数据查询时,提高记录的查询的速度。

客户首先将查询的条件提交给数据库服务器,服务器收到条件后,去查询索引表,根据索引表,

找到对应的数据记录存储位置,并根据位置找到对应的数据记录。

在这个过程当中,客户并没有直接与索引接触。

数据导入导出中的驱动程序:

* ODBC ==> 开放式数据库连接

如在asp中调用odbc的方法:

先在控制面板|管理工具|ODBC| 建立系统数据源,要求指出驱动程序,数据库以及名称

接着在asp中直接调用所建立的odbc即可,若odbc的名称为 wdlj , 则在asp中直接

通过 db.open wdlj 调用即可.

* 在sql server中sql server的驱动程序有:

用于 sql server 的 microsoft odbc 驱动程序 ==>通过odbc调用.

用于 sql server 的 microsoft ole db 驱动程序 ==>该驱动为sql server本身驱动程序

* 在 sql server的 access 驱动程序有:

microsoft access ==>access驱动程序

* 在 sql server的 excel 驱动程序有:

microsoft excel 97-2000 ==>excel 驱动程序

在sql server中链接服务器的使用方法:

. 通过sql server中的链接服务器,链接 access 文件

* 打开企业管理器|安全性|链接服务器,右键打开,选择“新建链接服务器”

* 指出链接服务器的名称,如 access123456 [任意]

指出链接服务器的驱动程序, 此处所使用的驱动为通用的桌面型数据库驱动程序

microsoft jet 4.0 ole db provider

指出所要链接的产品名称,如 access [任意]

指出数据源 , 即 所要链接的access文件路径与文件名,如 d:\aaa\db1.mdb

确定后完成即可。

* 链接服务器建立完成后,必须通过查询分析器以及sql 语句查询

如 select * from access123456...xyxx

------------- ----

链接服务器名称 ... 数据表

. 通过 sql server中的链接服务器,连接 excel 文件

* 在新建链接服务器窗口中,指出链接服务器名称,如 excel9900

指出链接服务器的驱动程序, microsoft jet 4.0 ole db provider

指出所要链接的产品名称,如 excel

指出数据源,如 d:\aaa\123456.xls

指出程序字符串, excel 5.0 [excel的程序字符串,必须是 excel

确定后完成即可。

* 使用的方法与access链接服务器相同。

sql server中权限配置方法

一.在 sql server 中建立允许登录到 sql server 的登录帐号:

[与数据库暂时无关]

1. 建立采用sql server验证的用户登录:

* 在企业管理器|安全性|登录,新建登录

在窗口中指出登录的新帐号,如 wuwei 5.0]

选择登录类型为 sql server身份验证

并指出登录的密码,即可.

2. 建立采用windows身份验证的用户登录:

[与windows计算机中的用户有关]

* 打开windows计算机中的本地用户和组窗口,在其中,首先建立一个新的用户,如 xp

* 完成后,在sql server企业管理器中,打开安全性|登录,并在其中新建登录

在登录帐号中,选择刚刚所建立的windows用户帐号,如 xp

登录类型选择

完成即可.

3.注意:

如果采用windows身份验证,并且该用户已被添加到 windows计算机中的administrators 组内,

则用该windows用户登录后,可以完全控制整个sql server服务器,原因在于其已经服务器管理员.

无论哪种方法登录,如果用户是普通的帐号,则其虽然可以登录数据库服务器,但是其并没有

访问数据库的权限,因此打开数据库均会提示出错。

二. 为数据库指定用户访问:

[当用户登录到sql server服务器后,实际上该用户并不能访问及显示数据库内容]

方法:

如果要使登录的用户,能够访问指定的数据库,则只需要将登录的用户帐号添加到指定的数据库中,

或者设定登录帐号允许访问指定的数据库。

* 打开登录帐号的属性|数据库访问, 在窗口中,选中所要访问的数据库即可

或者

打开企业管理器中指定数据库|用户,右键打开“新建数据库用户”,在窗口中选择指定的用户,

确定即可。

说明:以上操作,可以使用户查看到数据库中的对象信息,包括名称,类型,时间等

但是要操作或者访问其中的对象,则仍然是不允许。

三. 数据库中各对象的权限配置:

[虽然登录的用户已经允许访问数据库,但是由于没有配置其中的对象权限,因此仍然不能访问其中的对象]

* 采用管理员登录后,进入数据库对象的属性,如数据表xyxx的属性,打开

在其中,为指定的用户选择指定的权限.

如 select ==>查询权限

insert ==>添加权限

update ==>修改权限

delete ==>删除权限

dri ==>继承权限

如果是一个存储过程(一段程序代码) ,则其权限只有 exec ==>执行权限

四. 角色及服务器角色:

1. 角色:

与windows服务器中所述的 组 一致,每个角色都有特定的访问权限,只要将用户添加

到特定的角色中,则该用户具有了与角色相同的权限.

[角色是不能用于登录]

2. 服务器角色:

sql server中的服务器角色共八个, 用户是无法针对于这些服务器角色做添加删除修改等操作.

服务器角色针对数据库服务器进行权限配置,因此该类角色是完全针对于服务器,而不是某一个数据库

3. 服务器角色的内容:

* bulk insert administrators 具备插入记录权限

* database creators 具备建立数据库权限

* disk administrators 具备数据库文件管理权限

* process administrators 具备数据库服务器进程管理权限

* security administrators 具备数据库服务器安全配置权限

* server administrators 具备数据库服务器范围配置权限

* setup administrators 具备数据库服务器中存储过程配置权限

* system adminstrators 具备数据库服务器所有的权限

五. 数据库角色:

服务器角色针对于整个sql server服务器

数据库角色是针对于某一个数据库而配置的角色.

每一个数据库都有对应的数据库角色,默认有十个数据库角色,而且也允许用户自行建立数据库角色

以及修改与管理新建的数据库角色.

1.默认的十个数据库角色:

* db_accessadmin ==>具备数据库访问权限(所有的数据)

* db_backupoperator ==>具备数据库备份与还原权限

* db_datareader ==>数据读取

* db_datawriter ==>数据写入

* db_ddladmin ==>数据库关联文件管理

* db_denydatareader ==>拒绝数据读取

* db_denydatawriter ==>拒绝数据写入

* db_owner ==>数据库所有者(具备所有的权限)

* db_securityadmin ==>数据库安全管理(帐号以及登录与权限)

* public ==>普通用户(所有新建的用户均属于该角色,权限最小)

2.在 sql server中建立自定义的角色:

* 在数据库中的角色一项中,右键打开新建数据库角色,指出具体的名称,如 js

* 确定后,再次打开所新建的角色,单击权限选项,为该角色配置对应的权限(与用户权限配置方法相同)

* 可以在界面中单击添加,指出要添加哪些用户到当前角色中.

六. sql server中数据库的备份与恢复方法:

T-sql 程序设计

一.sql server中的批与脚本:

脚本: sql server中脚本,即可以完成特定功能的一段代码,如通常会在企业管理器中,

将数据库生成 sql脚本 , 到另外的计算机中,将sql脚本导入到查询分析器中执行,

则新的计算机也将具有与原计算机相同的数据库结构.

sql server中脚本,通常是由 批 组成的

批: 通常一个脚本,会由一个或多个批组成, 每一个批将以 GO 代码结束.

整个脚本,实际也可以由一个批组成,也可以省略 GO 代码.

而通常的批在脚本中,是用于完成该脚本中的某一项子功能,如用于在脚本中建立 xyxx 数据表

或者用于在脚本中检测xycj数据表是否存在等.

注: 如果脚本中有多个批,若其中的一个批出现故障,则剩下的批将不再执行.

二.sql server中的变量:

(局部变量 全局变量)

1.局部变量:

sql server中的局部变量,与其它程序设计中的变量类似,均是用于临时存放程序运行过程

中的数据.当程序结束后,该变量将消失,不可用.

sql server中局部变量,其采用 @名称 表示,如 @sm

* 局部变量要使用,首先必须要定义才行,定义的同时还需要指定其数据类型

定义的方法:

declare 变量名 数据类型

如 declare @sm int

* 为局部变量进行赋值

方法一 set 变量名=数据

方法二 select 变量名=数据

例:

declare @sm int,@pjshf real

select @sm=count(xh) from xyxx

select @pjshf=avg(shf) from xyxx

print '网络班全班总人数为' + convert(varchar(10),@sm) + '人'

print '网络班全班的平均生活费为' + convert(varchar(20),@pjshf) + '元'

其中 convert(varchar(20),@pjshf) ==>将@pjshf变量中的数据,转化为变长型字符串,最大长度为20

2.sql server中全局变量:

sql server中全局变量采用 @@表示,全局变量的名称是一定的,用户不可以随意修改.

全局变量可以在sql server中的任何一个程序中调用.

通常全局变量是用于表示sql server运行过程中的相关数据,如数据表中被修改的记录数

* @@connections ==>sql server从启动至今,所有的连接总数,包括未连接的数目.

* @@error ==>存放了上一条sql 语句执行后的错误代码,如果错误代码为0,表示没有错误.

* @@identity ==>存放了最近一次插入的自动编号

* @@rowcount ==>存放上一条sql语句所影响的记录数

* @@version ==>sql server服务器的版本

sql server中的语句结构

一. if 条件语句结构:

if 语句,用于条件判定,即条件成立时,执行一段代码,条件不成立时,执行另外一段代码。

格式:

if 条件

代码1

else

代码2

上述的代码格式中, 代码1与代码2 只允许存在一行代码,因此如果有多行代码,则必须

采用 begin ... end 包括。

实际上 begin ... end 包括的是一个语句块。

例:

select @zrs=count(xh) from xycj

select @sxrs=count(xh) from xycj where yw+sx+yy+jsj+ty>=400

select @dbl=@sxrs*100/@zrs

if @dbl>=40

begin

print '班级的达标率为' + convert(varchar(10),@dbl) + '%,已经达标!'

end

else

begin

print '班级的达标率为' + convert(varchar(10),@dbl) + '%,班级未达标!'

print '此处是代码结束了'

end

二. sql server中的while循环语句:

while 条件

代码

说明: 上述的代码中,只要条件成立,则循环将一直执行对应的代码。

如果不加 begin ... end ,则代码只允许一行。

因此通常的循环语句应该为

while 条件

begin

具体代码段

end

循环语句在设计时,一定要注意循环必须存在结束的语句,否则循环一直执行下去,并且

造成死循环。

例:

declare @i int,@zh int

select @i=1

select @zh=0

while @i

begin

select @zh=@zh+@i

select @i=@i+1

end

print '1+2+3+4+...+499+500=' + convert(varchar(10),@zh)

例:

declare @i int,@j int

select @i=95001

select @j=95023

while @i

begin

select * from xyxx where xh=@i

select @i=@i+1

end

三. return 语句:

return 即返回,通常用于在用户自定义的函数中,采用return返回函数执行的结果。

return语句通常放在自定义的函数末尾,由于return语句以后的代码是不会被执行。

四. waitfor 语句:

waitfor 语句,可以实现程序代码的暂停,时隔多久或者什么到达什么时间再继续执行。

waitfor语句的两种用法:

waitfor delay '00:00:19' ==>暂停 0小时0分钟19秒

waitfor time '13:12:09' ==>暂停到 13点12分09秒

五. print 语句:

将数据作为消息输出到 查询分析器中

六. sql server中函数的具体应用:

1. 数学函数:

* abs

求数据的绝对值

abs(-980) ==>结果 980

* ascii

求一个字符所对应的ascii码

ascii('A') ==>结果为 65

* avg

求出某一个字段的平均值

select avg(nl) from xyxx ===>求出数据表中nl的平均值

* count

求出某一个字段的数据数目

select count(xh) from xyxx ==>求出数据表中字段xh 的数目[实际上也是记录数]

* power

求出x的y次方

print power(2,3) ==>求出2的3次方

* sign

用于判定一个数据是否为负数(判定一个指定数据的符号)

print sign(-123) ==>结果为-1

print sign(100) ==>结果为 1

* rand

用于产生一个随机数,范围在 0 ~ 1 之间

rand(100) ==>产生一个0 ~ 1的小数

例 print rand() ==>未给定随机数种子,则采用当前计算机时间作为种子

如果要得到一个较大的随机数,通常是将该随机数扩大 N 倍, 即 rand()*10000

* round

针对于数据进行四舍五入

round(345.65,1) ==>结果为 345.7

其中的参数 1 表示要近似到小数点后的位数

round(345.65,0) ==>结果为346

其中的参数 0 表示近似到小数点后的0位数

注意,针对于带小数点的数据,如果要实现取整,则可以直接将数据赋值给一个整型的变量即可

declare @a real,@b int

set @a=789.123

set @b=@a

print @b ==>结果为 789

2. sql server中的字符串函数:

* len

求出字符串的长度(字符串中字符的个数)

len('abcde测试') ==>结果为 7 ,即7个字符

* datalength

求出字符串所占的字节数

datalength('abcde测试') ==>结果 9, 占9个字节(一个汉字占两个字节)

* left

从字符串左侧开始,连续取 x 个字符

left('abcdefg',2) ==>结果为 ab

* right

从字符串右侧开始,连续取 x 个字符

right('abcdefg',2) ==>结果为 fg

* substring

从字符串的指定位置开始,连续取 x 个字符

substring('abcdefghijkl',4,3) ==>def

注意,通常情况下,可以采用该函数结合循环语句,可以检测字符串当中的每一个字符

substring(字符串,变量,1) ==>通过循环改变 变量的值

declare @a varchar(150),@b int ,@c varchar(150)

set

@a='1234sadf4353214dsaf3245567768ljlj4532s3425fdsafd[1**********]345fdgfdgfds[**************]43'

set @c=''

set @b=1

while @b

begin

if substring(@a,@b,1)'z'

begin

set @c=@c + substring(@a,@b,1)

end

set @b=@b+1

end

print @c

* replicate

可自行重复指定的字符

replicate('a',10) ==>结果为 10个a字符

* stuff

将字符串当中的指定数据,替换成另外的一组数据

格式 stuff(字符串1,x,y,字符串2) ==>将字符串1中,从第x位开始,连续取y位,

用字符串2替换

print stuff('abcdefghijk',2,4,'中国') ==>结果为 a中国fghijk

* reverse

将指定字符串实现倒置

reverse('abcdef') ==>结果为 fedcba

3. 日期函数:

* getdate()

可以获取当前计算机的日期时间

print getdate() ==>结果为 01 9 2003 2:25PM

* datepart

可以返回指定日期时间中的指定数据,如要求返回年份或者返回月份

格式:

datepart(参数,具体的日期时间)

参数如下

year ==>返回年份

month ==>返回月份

day ==>返回天数

hour ==>返回小时

minute ==>返回分钟

second ==>返回秒

weekday ==>返回星期数

例:

print convert(varchar(10),datepart(year,getdate())) + '年'

+ convert(varchar(10),datepart(month,getdate())) + '月'

+ convert(varchar(10),datepart(day,getdate())) + '日' ==>最终结果为 2003年1月9日

* dateadd

为指定的日期添加对应的数据,如在现在日期基础上添加一年

格式

dateadd(参数,数据,日期)

参数与 datepart参数一致

例 dateadd(year,3,getdate())

4.系统函数:

* current_user ==>显示当前操作数据库的用户

* system_user ==>显示当前登录信息

* host_name() ==>显示sql server 计算机名

* isdate()

用于判定具体的数据是否为日期格式

例 isdate('2010-2-31') 结果为 0

isdate('2010-3-31') 结果为 1

* isnumeric()

用于判定具体的数据是否为数字

例 isnumeric('abcd') 结果为 0

isnumeric('100') 结果为 1

isnumeric('123e5') 结果为 1 ,其中的e 为科学记数法

isnumeric(200) 结果为 1

* isnull(表达式1,表达式2)

用于判定表达式1值是否为空,如果为空,则返回表达式2.否则返回表达式1.

isnull函数,主要用于判定数据库中某一个字段是否为空值(注意不是空字符串)

例:

declare @a varchar(5),@b varchar(9)

set @a=''

set @b='678'

print isnull(@a,@b) ==>结果为空字符串 ,其中@a 中存放的是空字符串,即有数据.

七. 用户自定义函数:

当sql server中没有所需的函数时,则可由用户自行创建一个对应的函数

1.自定义函数的建立方法:

可以通过企业管理器数据库中的自定义函数界面进行建立

或者

通过在查询分析器中输入建立自定义函数的代码,并执行来建立.

2. 具体的代码:

create function 自定义函数的名称 (@参数名 具体类型)

returns 返回结果的类型

as

begin

具体的函数体代码

return 具体数据(函数执行后的结果)

end

说明: 自定义函数的名称,是用于表示所创建的函数,不能与已存在的函数重名

@参数名 ==>函数执行时,需要由外界传数据给函数,此处的参数即为传递数据之用

返回结果的类型 ==>每个函数最终都要返回具体的数据,因此必须指定一个类型

例:

create function pj (@xh int)

returns real

as

begin

declare @fs real

select @fs=(yw+sx+yy+jsj+ty)/5 from xycj where xh=@xh

return @fs

end

3.自定义函数的调用方法:

格式 dbo.自定义函数名(具体参数)

如 print dbo.pj(95006) ==>此处将95006传给函数pj中的@xh,并执行函数

八.事务处理:

操作序列,序列中的操作作为一个不可分割的工作单元,这些操作要么全部执行,要么都不执行,是

不可分割的工作单元.

例如,在银行转帐时,必定是从A帐号中减少 1000元,而在B帐号中增加 1000 元. 这两个操作缺一不可.

事务处理的主要功能是,当事务处理开启后,所有的操作均是临时性的,不会保存.只有当执行了确定

后,所有的操作将会保存下来,如果当某些操作出错时,可以通过事务处理回滚到原来状态.

1.事务处理的应用方法:

* 在程序开始时,将事务处理的功能开启

begin tran

* 当程序都正确执行了,没有出现意外,则需要将事务进行确定(将临时处理的数据保存到数据库)

commit tran

* 当程序在执行时,出现了意外,则需要将事务进行回滚(恢复到原来数据)

rollback tran

例: 通过事务处理,确定删除数据与修改数据的安全性

begin tran

declare @a int,@b int

delete from xyxx where xh=95024

set @a=@@error

update xyxx set xm='宋杰' where xh=95006

set @b=@@error

if @a=0 and @b=0

begin

commit tran

print '数据表操作成功!'

end

else

begin

rollback tran

if @a0

print '数据表删除记录操作出现意外,数据回滚!'

if @b0

print '数据表修改记录操作出现意外,数据回滚'

end

存储过程与触发器

一.存储过程介绍:

* 一组预先编译好的 T-sql代码,执行时无需再次编译,提高了程序的运行效率.

* 存储过程一经定义,可以被无数次地调用,增加了代码的共享性.

* 保证安全,设置存储过程仅对关键的数据访问,不允许用户直接使用sql语句或企业管理器来

访问数据.

* 降低网络流量,一条命令,即可调用一个存储过程(有的存储过程有几百条代码)

* 存储过程的类型:

包括 常规的存储过程 与 扩展型存储过程 两种

常规的存储过程,其主要是用于针对sql server中数据库以及数据库对象进行管理的子程序

也可以由用户自行建立

而扩展型存储过程,其存在于master数据库中,并且扩展型存储过程,对应的是windows中的

关联文件,并且可以直接操作windows计算机(存在一定的安全隐患).

二.创建存储过程的方法:

[可以在企业管理器数据库下的存储过程中建立新的存储过程,或者在查询分析器中建立]

建立存储过程的具体格式:

create procedure 存储过程名称 (@参数 类型)

as

具体的代码

例:

create procedure dgxx

as

declare @zs int,@nrs int,@vrs int,@pjnl real

select @zs=count(xh) from xyxx

select @nrs=count(xh) from xyxx where xb=1

select @vrs=count(xh) from xyxx where xb=0

select @pjnl=avg(nl) from xyxx

print '全校总人数为' + convert(varchar(5),@zs) +'人'

print '全校男同学人数为' + convert(varchar(5),@nrs) +'人'

print '全校女同学人数为' + convert(varchar(5),@vrs) +'人'

print '所有同学平均年龄为' + convert(varchar(5),@pjnl) +'岁'

例:

CREATE procedure xyxinxi (@fs int)

as

select xyxx.xh as 学号,xm as 姓名,xb as 性别,rxrq as 入学时间,zy as 专业,(yw+sx+yy+jsj+ty) as 总分 from xyxx,xycj

where xyxx.xh=xycj.xh and (yw+sx+yy+jsj+ty)>=@fs order by 总分 desc

declare @zs int

select @zs=count(xyxx.xh)

(yw+sx+yy+jsj+ty)>=@fs

select @zs as 录取的总人数

GO

三.存储过程的调用方法:

具体格式

execute 数据库名.dbo.存储过程名 ===>无参数的过程调用

execute 数据库名.dbo.存储过程名 参数 ==>有参数的过程调用

说明: 如果在当前数据库下执行存储过程,可省略 数据库名.dbo.

实际执行时,也可以省略 execute 关键字

如 xueyuan.dbo.dgxx

xueyuan.dbo.xyxinxi 350

四.扩展型存储过程应用:

xp_cmdshell 'net user wang 123456 /add'

说明: 通过扩展型存储过程xm_cmdshell ,在sql server服务器中建立了一用户wang 密码为123456

五. 触发器介绍:

触发器,实际上也是一种存储过程,但是触发器与普通的存储过程不同的是,触发器是当外界发生 from xyxx,xycj where xyxx.xh=xycj.xh and

某些事件以后,将会自会执行.

触发器创建以后,用户是不能直接调用的,而是当有相应的操作触动某一个条件后,触发器自动执行.

通过触发器,可以完成更为复杂的数据完整性约束.

六. 创建触发器的方法:

说明:

触发器在创建时,一定要指出该触发器是作用在哪一个数据库对象上(如数据表xyxx上),

同时还要指出发生了什么事件才会自动执行这个触发器

具体的格式:

create trigger 触发器的名称

on 数据表名

after 具体操作

as

具体的代码

建立触发器中的说明:

其中 触发器名称 ,用于标识触发器,不允许出现与其它名称相同的情况

数据表名,表示该触发器是作用的范围

after ==> 表示在什么之后,

如 after insert ==>表示在添加之后

after delete ==>表示在删除之后

after update ==>表示在修改之后

七. 添加、删除、修改三种触发器的建立:

1. 添加型触发器:

create trigger tjcf

on xyxx

after insert

as

declare @xh int

select @xh=xyxx.xh from xyxx where not exists (select * from xycj where xyxx.xh=xycj.xh)

insert into xycj(xh,yw,sx,yy,jsj,ty) values(@xh,0,0,0,0,0)

2.删除型触发器:

create trigger sccf

on xyxx

after delete

as

declare @xh int

select @xh=xycj.xh from xycj where not exists (select * from xyxx where xyxx.xh=xycj.xh)

delete from xycj where xh=@xh

3.修改型触发器:

create trigger xgcf

on xyxx

after update

as

declare @xh1 int,@xh2,int

select @xh1=xyxx.xh from xyxx where not exists (select * from xycj where xyxx.xh=xycj.xh)

select @xh2=xycj.xh from xycj where not exists (select * from xyxx where xyxx.xh=xycj.xh)

update xycj set xh=@xh1 where xh=@xh2

sql server概述及应用

一.sql server常用工具介绍:

1. 企业管理器:

* sql server大管家,针对于数据库的所有内容做控制管理

* 包括数据库建立,数据表的建立,数据添加删除修改查看等

* 数据库安全管理,数据库访问控制等。

2. 查询分析器:

可执行任何的sql 语句,完成查询、添加、删除、修改等操作,并且可以通过语句控制管理

数据库以及数据表等

3. 服务管理器:

可以针对于 sql server服务 以及 sql server agent 服务进行控制管理,如

启动某一服务或停止某一服务。

4. 导入与导出数据:

将非sql server数据库中的数据,通过该工具与 sql server数据库实现转化。

5. 事件探查器:

探查器可以随时监控数据库服务器所发生的所有事件。包括哪个用户对哪个数据库及对象做出

何种操作。

探查器在工作时,会占用大量内存及cpu资源,因此建议不要长期运行,否则会影响服务器性能。

二. sql server 目录:

* sql server 程序目录 C:\Program Files\Microsoft SQL Server\MSSQL

* sql server 数据库目录 C:\Program Files\Microsoft SQL Server\MSSQL\Data

三. 在企业管理器中默认的六个数据库:

[master tempdb model msdb northwind pubs]

1. master数据库:

sql server核心数据库,用于保存整个sql server的所有配置,包括用户帐号、密码、

所有的数据库名称、字段、安全配置、以及与数据库有关的所有sql语句代码。

master数据库的各种操作,均由sql server 本身自行完成,用户不允许对其数据库做操作。

2. tempdb数据库:

临时数据库,用于临时存放数据,如针对数据库进行建立索引,或者复制数据库以及创建数据库

时,都需要借助临时数据库,进行数据临时存放.

临时数据库,不允许做对应的操作,而是由sql server 自行管理.

3. model数据库:

(模板数据库)

在建立一个新数据库时,必须由模板数据库提供最基本的结构以及基本的数据,并将这些

内容复制到新数据库中.因此一个新的数据库结构与模板数据库结构是一致.

4. msdb 数据库:

(分布式数据库)

sql server具备监控数据库服务器的功能,而所有的监控记录会保存在 msdb 数据库中.

5. northwind 与 pubs 数据库:

这两个数据库是sql server提供的实例,与系统无关.

四. sql server中数据库的对象:

[每建立一个数据库后,该数据库就自带多个对象]

1. 表 =>又称为数据表,数据库中所有的数据,均存放于数据表中. 又分为系统数据表与用户数据表

2. 关系图 =>用于指定两个数据表或多个数据表之间的关系.比如学员信息表与学员成绩表之间,应

该按照学员编号进行关联.

3. 视图 => 一段select 代码,用于查询指定的数据,只是将这一段代码用一个特定的名称表示而已

4. 存储过程 => 一段 sql 代码,用于完成sql server某项特定功能, 同时也可以由用户自行编写

新的存储过程. (存储过程即sql server中的子程序)

5. 规则 => 为数据表中的各字段添加指定的条件,以限制各字段数据输入的准确性.

6. 默认 => 当为数据表添加数据时,若没有为指定字段添加数据,则该字段会采用默认的数据填充.

7. 用户 => 针对于不同的数据库,指定不同的管理员,或者设置指定的用户允许访问特定的数据库以

及特定的数据库对象.

8. 角色 => 相当于服务器系统中的组,不同的角色有不同的权限,将用户添加到指定的角色,则该

用户就与该角色有相同的权限.

9. 自定义类型 =>用户自行创建对应的数据类型,可以将规则与默认也添加到自定义类型中

10. 自定义函数 =>用户自行创建函数,建立特定功能的函数.

五. 建立数据库的方法:

1. 认识数据库对应的文件:

MDF =>数据库的主文件, 每个数据库必须有该文件,而且只有一个.

NDF =>当数据库过大时,会导致主数据库文件过大,影响数据库的存取速度,因此可以

增加辅数据库文件,用于分摊整个数据库的数据,提高访问速度.

辅数据库文件允许存在多个,也可以没有.

LDF => 事务文件,用于存放数据库的运行情况以及错误信息等.

2. 建立数据库方法:

在企业管理器中,选择

指出数据库的名称,是否要采用辅数据库文件,以及数据库的容量增长方式.

还有数据库的最大值.

六.创建数据表:

1.数据表中各字段的数据类型:

[字符型,数字型,日期型,货币型,二进制类型,位类型,国际字符类型]

. 字符型:

* char 型 ==>定长型字符串类型 最大长度为 8000

* varchar 型 ==>变长型字符串类型 最大长度为 8000

* text 型 ==>文本型数据类型(变长) 最大长度为 2^31

. 数字型:

* bigint型 =>大整数类型 -2^31 ~ 2^31

* int 型 =>整数类型 -2^16 ~ 2^16

* smallint 型 =>小整数类型 -32768 ~ 32767

* tinyint 型 =>微整数类型 0 ~ 255

* float 型 =>浮点型(小数)

* real 型 =>实型(小数)

* numeric 型 =>数值型(小数)

. 日期型:

* datetime 型 =>日期时间型 1753-1-1 ~ 9999-12-31 ,精确到1/300秒

* smalldatetime 型 =>小日期时间型 1900-1-1 ~ 2079-6-6 ,精确到分钟

. 货币型:

* money 型 => -2^63 ~ 2^63 , 精确到 万分位

* smallmoney 型 -2^31 ~ 2^31 ,精确到万分位

. 二进制数据类型

* binary 型 => 定长二进制类型 ,最大长度为 8000

* varbinary 型 => 变长二进制类型, 最大长度为 8000

* image类型 =>变长大二进制 ,最大长度为 2^31

. bit 位类型:

位类型,即数据只允许是 0 或 1 两个.

当输入0以外的其他值时,均看作 1

bit 类型,通常用作 逻辑类型, 表示 是 / 否

. unicode 类型

[用于国际上非英语语言]

* nchar 型 => 定长型 最多为 4000个字符

* nvarchar 型 =>变长型 最多为 4000个字符

* ntext 型 =>变长型, 最多为 2^30 个字符

2. 建立数据表的方法:

打开企业管理器|数据库|表,右键打开,选择

在窗口中,指出各字段,以及字段对应的数据类型

注意: 数据表中,应指定一个具体的字段为 主键

对于编号的字段,可以设定为自动编号 (标识)

对于字段不允许为空的, 应该选中

七. asp连接sql server 的方法:

db.open

其中 server 表示服务器IP地址

database 表示要连接的数据库

uid 表示连接时的帐号

pwd 表示连接时的密码

driver 表示连接时所使用的驱动程序

sql 语句具体用法

一.sql 介绍:

sql 称为结构化查询语言,是所有关系型数据库的标准.

该语言查询及操作时,完全面向结果,即用户只需要提出需求,则

sql 语句就可以立刻返回对应的结果,而具体的过程则无需关心.

sql server中所提供的查询分析器,可以执行各种sql 语句,同时查询分析器还具备

采用sql 语句实现代码编写,即sql server 二次开发.

sql server 所提供的sql 语句,称为 T-sql 或交互式sql 语句.

sql server 可以提供 select 语句,delete语句,update语句,insert语句等

二. select 语句用法:

1.采用select语句,查询整个数据表

select * from xyxx

注意: * 表示所有字段

2.查询指定的数据表字段

select xh,xm,xb,nl,zy from xyxx

注意: 只查询五个字段的数据

3.查询指定的数据表字段,并且别名表示字段名

select xh as 学号,xm as 姓名,zy as 专业 from xyxx

注意: 查询了三个字段,用学号表示xh,用姓名表示xm,用专业表示zy

4.查询数据表的前N条数据记录

select top 10 * from xyxx

注意: top 10 表示取出数据表的前 10 条记录

select top 10 * from xyxx order by shf desc

5.显示某一个字段中不重复的所有数据:

[显示出全班的同学分别来自哪些地区]

select distinct 字段名 from xyxx

select distinct dz from xyxx

6.select 语句中的统计函数:

[相关的统计函数包括 sum avg max min count ]

select avg(yw) as 语文平均分 from xycj

select count(yw) as 语文及格人数 from xycj where yw>=60

select count(xh) as 全班总人数 from xycj

7. 按条件进行数据查询:

. 条件语句的格式:

select * from xyxx where 具体的条件

如 select * from xyxx where shf

select * from xyxx where zy='一年网络' and xb=1

[找出专业为一年网络并且是男同学]

. 采用 关键字 in 来表示条件所在的具体范围:

select * from xyxx where 具体条件

如 select * from xyxx where xh in (95003,95007,95008,95010)

说明: (95003,95007,95008,95010) 是一个集合.

而条件是判定 xh 在 上述的集合中.

. 采用 between 制定条件所在的范围:

如 select * from xyxx where nl between 16 and 33

其中 between 表示在....之间

上述的语句,表示查 nl 字段 在 16 到 33 之间的数据记录

. 采用模糊查询方式,进行数据搜索:

select * from xyxx where dz like '%西%'

其中 % 表示任意的字符

like 表示相似类似

select * from xx where xw like '%汽车%'

找出xw字段含有汽车两字的.

8. 数据排序:

按照某一个字段的升序或者降序 进行排列数据记录

select * from xyxx order by 字段 排序方式

说明: order 排序

by 按照

字段,即为要排序的依据

排序方式 asc -->升序,也是默认的方式

desc -->降序

select * from xyxx order by shf desc

select * from xyxx order by dz desc,xh desc ==>如果第一个排序字段相同,则采用第二个字段排序.

9. 字段组合:

select *,(yw+sx+yy+jsj+ty) as 总分,(yw+sx+yy+jsj+ty)/5 as 平均分

from xycj where (yw+sx+yy+jsj+ty)>=400 order by 总分 desc

例 select xh from xycj where (yw+sx+yy+jsj+ty)>=400

10. 数据分组查询:

[按照指定的字段进行分类]

select 分组的字段,统计函数 from 数据表 group by 分组字段

如 select xb,avg(shf) from xyxx group by xb ==>按性别进行分组,统计每组的平均生活费

select dz,avg(shf) from xyxx group by dz ==>按地区进行分组,统计每组的平均生活费

11. 分类汇总数据:

select * from xyxx order by xb compute avg(shf) by xb

分类汇总,即按照某一个字段进行分类, 同时将每一种进行汇总统计

[如 按地区进行分类,同时将每个地区的学员的平均年龄求解 ]

[分类汇总时,一定要注意在分类时一定要为分类的字段做排序操作,否则出错]

select * from xyxx order by dz compute avg(nl) by dz

12. 多表查询:

. 所要查询的数据,来自于多个数据表

[要查询所有同学的学员信息以及考试总分,这些信息分别来自于学员信息表与学员成绩表]

select * from xyxx,xycj ==>数据表1中的每一条记录都要与数据表2中所有记录对应

[该方式查询是错误的]

select * from xyxx,xycj where xyxx.xh=xycj.xh ==>在查询时,要找出数据表1中的

关联数据与数据表2中

的关联数据相对应

select xyxx.xh,xm,xb,(yw+sx+yy+jsj+ty) as zf from xyxx,xycj where xyxx.xh=xycj.xh and (yw+sx+yy+jsj+ty)>=400

. 通过多表子查询的方式,实现多表查询

select * from xyxx where xh in ===>找出学号在集合当中的信息

(

select xh from xycj where (yw+sx+yy+jsj+ty)>=400 ===>该语句产生了满足条件的所有学员

的学号,并形成一个学号集合

)

. 通过不存在性查询,实现不关联的数据查询

[如在学员信息表中存放全班所有学员的信息,但学员成绩表中会存在没有成绩的学员]

select * from xyxx where not exists

(

select * from xycj where xyxx.xh=xycj.xh

)

说明: select * from xyxx ===>找出xyxx表中所有数据

select * from xyxx,xycj where xyxx.xh=xycj.xh ===>多表查询后的结果(关联)

not exists ===>不存在性查询的关键字

注意: 不存在性查询的子语句 select * from xycj where xyxx.xh=xycj.xh ,不需要再指出xyxx 数据表

13. 通过selete语句,将select查询结果,保存为数据表

select * into lqxyb from xyxx where xh in (select xh from xycj where zf>=400)

三. insert 语句用法:

[insert 语句, 即向指定的数据表中,添加数据记录]

insert 语句的格式

insert into 数据表名(字段名1,字段名2,字段名3,...) values(数据1,数据2,数据3,...)

例:

insert into xyxx(xm,xb,nl,dz,rxrq,shf,zy) values('江民',1,50,'北京','2010-7-1',800,'一年网络')

四. update 语句用法:

[update语句,即用于对指定数据表做数据记录的修改]

update语句的格式

update 数据表名 set 字段名1=数据1,字段名2=数据2,字段名3=数据3... where 条件

在进行使用update语句时,一定要添加上 条件, 否则将会修改数据表中所有记录

例:

update xyxx set xm='王有民',nl=60,dz='上海',rxrq='2009-8-1' where xh=95025

五. delete 语句用法:

[delete语句,即用于对指定数据表中记录做删除操作]

delete语句的格式

delete from 数据表名 where 条件

在使用delete语句时,一定要添加 条件, 否则将删除数据表中所有记录

索引的应用

一.索引的介绍:

* 索引可以高效地快速地在大量数据记录中,找到所需要的数据.

[相当于书本的目录]

* 索引通常是针对于大型的数据表,以及记录数较多的场合下应用.

* 索引的建立是需要花费较多的计算机与服务器资源的.

当数据记录发生变化时或者数量发生变化时,索引必须要重新建立

二. 创建索引的注意事项:

* 数据表的记录数很少,通常不需要建立索引

* 不要为某一个数据量很少的字段建立索引,如 性别

* 不要为某一个数据量很大的字段建立索引,如 简介 或者 文章的内容

* 数据表的添加、删除、修改等操作远远大于查询操作,此时也不要建立索引

针对于学员信息表,可以为数据表中 学号 姓名 地址等建立索引

三. 索引的类型:

1. 按结构分类:

* 聚集索引

聚集索引,在数据表中,只允许有一个存在,通常是主键.

聚集索引建立后,会存在一个以主键为内容的小表,该小表的数据存放地址与原数据表完全相同

当查询时,找到小表中的数据,也就表示找到了原数据表中的数据记录.

* 非聚集索引

非聚集索引,在建立索引时,会产生一个小表,小表中存放建立索引的字段,以及对应

数据记录所在的存储地址。

当查询时,先在小表中找到数据,然后对应找到存储地址,最后通过存储地址,找到

原数据表中的数据记录。

2. 按索引唯一性分:

* 唯一性索引 => 建立索引的字段是唯一的

* 非唯一性索引 =>建立索引的字段不唯一

四. 索引创建方法:

打开数据表的设计窗口,右键打开选择

* 如果数据表已经有了主键,则会自动存在一个 聚集索引与唯一性索引

* 若要为其它字段建立索引,如 姓名,可以单击

,并指出是否为聚集索引(如果有了主键,则不能再建立聚集索引)

指出是否为唯一性索引,(如果该字段存在相同的数据,则也不能建立唯一性索引).

* 通常不能建立聚集索引与唯一性索性,则该索引称为非聚集非唯一性索引。

五. 索引的管理:

在企业管理器的数据表上,右键打开“所有任务|管理索引”

可查看到数据表中所建立的所有索引,包括建立的字段名与类型。

若要修改索引,则直接单击“编辑”按钮即可.

注:

数据表建立了索引后,可以在对大量数据查询时,提高记录的查询的速度。

客户首先将查询的条件提交给数据库服务器,服务器收到条件后,去查询索引表,根据索引表,

找到对应的数据记录存储位置,并根据位置找到对应的数据记录。

在这个过程当中,客户并没有直接与索引接触。

数据导入导出中的驱动程序:

* ODBC ==> 开放式数据库连接

如在asp中调用odbc的方法:

先在控制面板|管理工具|ODBC| 建立系统数据源,要求指出驱动程序,数据库以及名称

接着在asp中直接调用所建立的odbc即可,若odbc的名称为 wdlj , 则在asp中直接

通过 db.open wdlj 调用即可.

* 在sql server中sql server的驱动程序有:

用于 sql server 的 microsoft odbc 驱动程序 ==>通过odbc调用.

用于 sql server 的 microsoft ole db 驱动程序 ==>该驱动为sql server本身驱动程序

* 在 sql server的 access 驱动程序有:

microsoft access ==>access驱动程序

* 在 sql server的 excel 驱动程序有:

microsoft excel 97-2000 ==>excel 驱动程序

在sql server中链接服务器的使用方法:

. 通过sql server中的链接服务器,链接 access 文件

* 打开企业管理器|安全性|链接服务器,右键打开,选择“新建链接服务器”

* 指出链接服务器的名称,如 access123456 [任意]

指出链接服务器的驱动程序, 此处所使用的驱动为通用的桌面型数据库驱动程序

microsoft jet 4.0 ole db provider

指出所要链接的产品名称,如 access [任意]

指出数据源 , 即 所要链接的access文件路径与文件名,如 d:\aaa\db1.mdb

确定后完成即可。

* 链接服务器建立完成后,必须通过查询分析器以及sql 语句查询

如 select * from access123456...xyxx

------------- ----

链接服务器名称 ... 数据表

. 通过 sql server中的链接服务器,连接 excel 文件

* 在新建链接服务器窗口中,指出链接服务器名称,如 excel9900

指出链接服务器的驱动程序, microsoft jet 4.0 ole db provider

指出所要链接的产品名称,如 excel

指出数据源,如 d:\aaa\123456.xls

指出程序字符串, excel 5.0 [excel的程序字符串,必须是 excel

确定后完成即可。

* 使用的方法与access链接服务器相同。

sql server中权限配置方法

一.在 sql server 中建立允许登录到 sql server 的登录帐号:

[与数据库暂时无关]

1. 建立采用sql server验证的用户登录:

* 在企业管理器|安全性|登录,新建登录

在窗口中指出登录的新帐号,如 wuwei 5.0]

选择登录类型为 sql server身份验证

并指出登录的密码,即可.

2. 建立采用windows身份验证的用户登录:

[与windows计算机中的用户有关]

* 打开windows计算机中的本地用户和组窗口,在其中,首先建立一个新的用户,如 xp

* 完成后,在sql server企业管理器中,打开安全性|登录,并在其中新建登录

在登录帐号中,选择刚刚所建立的windows用户帐号,如 xp

登录类型选择

完成即可.

3.注意:

如果采用windows身份验证,并且该用户已被添加到 windows计算机中的administrators 组内,

则用该windows用户登录后,可以完全控制整个sql server服务器,原因在于其已经服务器管理员.

无论哪种方法登录,如果用户是普通的帐号,则其虽然可以登录数据库服务器,但是其并没有

访问数据库的权限,因此打开数据库均会提示出错。

二. 为数据库指定用户访问:

[当用户登录到sql server服务器后,实际上该用户并不能访问及显示数据库内容]

方法:

如果要使登录的用户,能够访问指定的数据库,则只需要将登录的用户帐号添加到指定的数据库中,

或者设定登录帐号允许访问指定的数据库。

* 打开登录帐号的属性|数据库访问, 在窗口中,选中所要访问的数据库即可

或者

打开企业管理器中指定数据库|用户,右键打开“新建数据库用户”,在窗口中选择指定的用户,

确定即可。

说明:以上操作,可以使用户查看到数据库中的对象信息,包括名称,类型,时间等

但是要操作或者访问其中的对象,则仍然是不允许。

三. 数据库中各对象的权限配置:

[虽然登录的用户已经允许访问数据库,但是由于没有配置其中的对象权限,因此仍然不能访问其中的对象]

* 采用管理员登录后,进入数据库对象的属性,如数据表xyxx的属性,打开

在其中,为指定的用户选择指定的权限.

如 select ==>查询权限

insert ==>添加权限

update ==>修改权限

delete ==>删除权限

dri ==>继承权限

如果是一个存储过程(一段程序代码) ,则其权限只有 exec ==>执行权限

四. 角色及服务器角色:

1. 角色:

与windows服务器中所述的 组 一致,每个角色都有特定的访问权限,只要将用户添加

到特定的角色中,则该用户具有了与角色相同的权限.

[角色是不能用于登录]

2. 服务器角色:

sql server中的服务器角色共八个, 用户是无法针对于这些服务器角色做添加删除修改等操作.

服务器角色针对数据库服务器进行权限配置,因此该类角色是完全针对于服务器,而不是某一个数据库

3. 服务器角色的内容:

* bulk insert administrators 具备插入记录权限

* database creators 具备建立数据库权限

* disk administrators 具备数据库文件管理权限

* process administrators 具备数据库服务器进程管理权限

* security administrators 具备数据库服务器安全配置权限

* server administrators 具备数据库服务器范围配置权限

* setup administrators 具备数据库服务器中存储过程配置权限

* system adminstrators 具备数据库服务器所有的权限

五. 数据库角色:

服务器角色针对于整个sql server服务器

数据库角色是针对于某一个数据库而配置的角色.

每一个数据库都有对应的数据库角色,默认有十个数据库角色,而且也允许用户自行建立数据库角色

以及修改与管理新建的数据库角色.

1.默认的十个数据库角色:

* db_accessadmin ==>具备数据库访问权限(所有的数据)

* db_backupoperator ==>具备数据库备份与还原权限

* db_datareader ==>数据读取

* db_datawriter ==>数据写入

* db_ddladmin ==>数据库关联文件管理

* db_denydatareader ==>拒绝数据读取

* db_denydatawriter ==>拒绝数据写入

* db_owner ==>数据库所有者(具备所有的权限)

* db_securityadmin ==>数据库安全管理(帐号以及登录与权限)

* public ==>普通用户(所有新建的用户均属于该角色,权限最小)

2.在 sql server中建立自定义的角色:

* 在数据库中的角色一项中,右键打开新建数据库角色,指出具体的名称,如 js

* 确定后,再次打开所新建的角色,单击权限选项,为该角色配置对应的权限(与用户权限配置方法相同)

* 可以在界面中单击添加,指出要添加哪些用户到当前角色中.

六. sql server中数据库的备份与恢复方法:

T-sql 程序设计

一.sql server中的批与脚本:

脚本: sql server中脚本,即可以完成特定功能的一段代码,如通常会在企业管理器中,

将数据库生成 sql脚本 , 到另外的计算机中,将sql脚本导入到查询分析器中执行,

则新的计算机也将具有与原计算机相同的数据库结构.

sql server中脚本,通常是由 批 组成的

批: 通常一个脚本,会由一个或多个批组成, 每一个批将以 GO 代码结束.

整个脚本,实际也可以由一个批组成,也可以省略 GO 代码.

而通常的批在脚本中,是用于完成该脚本中的某一项子功能,如用于在脚本中建立 xyxx 数据表

或者用于在脚本中检测xycj数据表是否存在等.

注: 如果脚本中有多个批,若其中的一个批出现故障,则剩下的批将不再执行.

二.sql server中的变量:

(局部变量 全局变量)

1.局部变量:

sql server中的局部变量,与其它程序设计中的变量类似,均是用于临时存放程序运行过程

中的数据.当程序结束后,该变量将消失,不可用.

sql server中局部变量,其采用 @名称 表示,如 @sm

* 局部变量要使用,首先必须要定义才行,定义的同时还需要指定其数据类型

定义的方法:

declare 变量名 数据类型

如 declare @sm int

* 为局部变量进行赋值

方法一 set 变量名=数据

方法二 select 变量名=数据

例:

declare @sm int,@pjshf real

select @sm=count(xh) from xyxx

select @pjshf=avg(shf) from xyxx

print '网络班全班总人数为' + convert(varchar(10),@sm) + '人'

print '网络班全班的平均生活费为' + convert(varchar(20),@pjshf) + '元'

其中 convert(varchar(20),@pjshf) ==>将@pjshf变量中的数据,转化为变长型字符串,最大长度为20

2.sql server中全局变量:

sql server中全局变量采用 @@表示,全局变量的名称是一定的,用户不可以随意修改.

全局变量可以在sql server中的任何一个程序中调用.

通常全局变量是用于表示sql server运行过程中的相关数据,如数据表中被修改的记录数

* @@connections ==>sql server从启动至今,所有的连接总数,包括未连接的数目.

* @@error ==>存放了上一条sql 语句执行后的错误代码,如果错误代码为0,表示没有错误.

* @@identity ==>存放了最近一次插入的自动编号

* @@rowcount ==>存放上一条sql语句所影响的记录数

* @@version ==>sql server服务器的版本

sql server中的语句结构

一. if 条件语句结构:

if 语句,用于条件判定,即条件成立时,执行一段代码,条件不成立时,执行另外一段代码。

格式:

if 条件

代码1

else

代码2

上述的代码格式中, 代码1与代码2 只允许存在一行代码,因此如果有多行代码,则必须

采用 begin ... end 包括。

实际上 begin ... end 包括的是一个语句块。

例:

select @zrs=count(xh) from xycj

select @sxrs=count(xh) from xycj where yw+sx+yy+jsj+ty>=400

select @dbl=@sxrs*100/@zrs

if @dbl>=40

begin

print '班级的达标率为' + convert(varchar(10),@dbl) + '%,已经达标!'

end

else

begin

print '班级的达标率为' + convert(varchar(10),@dbl) + '%,班级未达标!'

print '此处是代码结束了'

end

二. sql server中的while循环语句:

while 条件

代码

说明: 上述的代码中,只要条件成立,则循环将一直执行对应的代码。

如果不加 begin ... end ,则代码只允许一行。

因此通常的循环语句应该为

while 条件

begin

具体代码段

end

循环语句在设计时,一定要注意循环必须存在结束的语句,否则循环一直执行下去,并且

造成死循环。

例:

declare @i int,@zh int

select @i=1

select @zh=0

while @i

begin

select @zh=@zh+@i

select @i=@i+1

end

print '1+2+3+4+...+499+500=' + convert(varchar(10),@zh)

例:

declare @i int,@j int

select @i=95001

select @j=95023

while @i

begin

select * from xyxx where xh=@i

select @i=@i+1

end

三. return 语句:

return 即返回,通常用于在用户自定义的函数中,采用return返回函数执行的结果。

return语句通常放在自定义的函数末尾,由于return语句以后的代码是不会被执行。

四. waitfor 语句:

waitfor 语句,可以实现程序代码的暂停,时隔多久或者什么到达什么时间再继续执行。

waitfor语句的两种用法:

waitfor delay '00:00:19' ==>暂停 0小时0分钟19秒

waitfor time '13:12:09' ==>暂停到 13点12分09秒

五. print 语句:

将数据作为消息输出到 查询分析器中

六. sql server中函数的具体应用:

1. 数学函数:

* abs

求数据的绝对值

abs(-980) ==>结果 980

* ascii

求一个字符所对应的ascii码

ascii('A') ==>结果为 65

* avg

求出某一个字段的平均值

select avg(nl) from xyxx ===>求出数据表中nl的平均值

* count

求出某一个字段的数据数目

select count(xh) from xyxx ==>求出数据表中字段xh 的数目[实际上也是记录数]

* power

求出x的y次方

print power(2,3) ==>求出2的3次方

* sign

用于判定一个数据是否为负数(判定一个指定数据的符号)

print sign(-123) ==>结果为-1

print sign(100) ==>结果为 1

* rand

用于产生一个随机数,范围在 0 ~ 1 之间

rand(100) ==>产生一个0 ~ 1的小数

例 print rand() ==>未给定随机数种子,则采用当前计算机时间作为种子

如果要得到一个较大的随机数,通常是将该随机数扩大 N 倍, 即 rand()*10000

* round

针对于数据进行四舍五入

round(345.65,1) ==>结果为 345.7

其中的参数 1 表示要近似到小数点后的位数

round(345.65,0) ==>结果为346

其中的参数 0 表示近似到小数点后的0位数

注意,针对于带小数点的数据,如果要实现取整,则可以直接将数据赋值给一个整型的变量即可

declare @a real,@b int

set @a=789.123

set @b=@a

print @b ==>结果为 789

2. sql server中的字符串函数:

* len

求出字符串的长度(字符串中字符的个数)

len('abcde测试') ==>结果为 7 ,即7个字符

* datalength

求出字符串所占的字节数

datalength('abcde测试') ==>结果 9, 占9个字节(一个汉字占两个字节)

* left

从字符串左侧开始,连续取 x 个字符

left('abcdefg',2) ==>结果为 ab

* right

从字符串右侧开始,连续取 x 个字符

right('abcdefg',2) ==>结果为 fg

* substring

从字符串的指定位置开始,连续取 x 个字符

substring('abcdefghijkl',4,3) ==>def

注意,通常情况下,可以采用该函数结合循环语句,可以检测字符串当中的每一个字符

substring(字符串,变量,1) ==>通过循环改变 变量的值

declare @a varchar(150),@b int ,@c varchar(150)

set

@a='1234sadf4353214dsaf3245567768ljlj4532s3425fdsafd[1**********]345fdgfdgfds[**************]43'

set @c=''

set @b=1

while @b

begin

if substring(@a,@b,1)'z'

begin

set @c=@c + substring(@a,@b,1)

end

set @b=@b+1

end

print @c

* replicate

可自行重复指定的字符

replicate('a',10) ==>结果为 10个a字符

* stuff

将字符串当中的指定数据,替换成另外的一组数据

格式 stuff(字符串1,x,y,字符串2) ==>将字符串1中,从第x位开始,连续取y位,

用字符串2替换

print stuff('abcdefghijk',2,4,'中国') ==>结果为 a中国fghijk

* reverse

将指定字符串实现倒置

reverse('abcdef') ==>结果为 fedcba

3. 日期函数:

* getdate()

可以获取当前计算机的日期时间

print getdate() ==>结果为 01 9 2003 2:25PM

* datepart

可以返回指定日期时间中的指定数据,如要求返回年份或者返回月份

格式:

datepart(参数,具体的日期时间)

参数如下

year ==>返回年份

month ==>返回月份

day ==>返回天数

hour ==>返回小时

minute ==>返回分钟

second ==>返回秒

weekday ==>返回星期数

例:

print convert(varchar(10),datepart(year,getdate())) + '年'

+ convert(varchar(10),datepart(month,getdate())) + '月'

+ convert(varchar(10),datepart(day,getdate())) + '日' ==>最终结果为 2003年1月9日

* dateadd

为指定的日期添加对应的数据,如在现在日期基础上添加一年

格式

dateadd(参数,数据,日期)

参数与 datepart参数一致

例 dateadd(year,3,getdate())

4.系统函数:

* current_user ==>显示当前操作数据库的用户

* system_user ==>显示当前登录信息

* host_name() ==>显示sql server 计算机名

* isdate()

用于判定具体的数据是否为日期格式

例 isdate('2010-2-31') 结果为 0

isdate('2010-3-31') 结果为 1

* isnumeric()

用于判定具体的数据是否为数字

例 isnumeric('abcd') 结果为 0

isnumeric('100') 结果为 1

isnumeric('123e5') 结果为 1 ,其中的e 为科学记数法

isnumeric(200) 结果为 1

* isnull(表达式1,表达式2)

用于判定表达式1值是否为空,如果为空,则返回表达式2.否则返回表达式1.

isnull函数,主要用于判定数据库中某一个字段是否为空值(注意不是空字符串)

例:

declare @a varchar(5),@b varchar(9)

set @a=''

set @b='678'

print isnull(@a,@b) ==>结果为空字符串 ,其中@a 中存放的是空字符串,即有数据.

七. 用户自定义函数:

当sql server中没有所需的函数时,则可由用户自行创建一个对应的函数

1.自定义函数的建立方法:

可以通过企业管理器数据库中的自定义函数界面进行建立

或者

通过在查询分析器中输入建立自定义函数的代码,并执行来建立.

2. 具体的代码:

create function 自定义函数的名称 (@参数名 具体类型)

returns 返回结果的类型

as

begin

具体的函数体代码

return 具体数据(函数执行后的结果)

end

说明: 自定义函数的名称,是用于表示所创建的函数,不能与已存在的函数重名

@参数名 ==>函数执行时,需要由外界传数据给函数,此处的参数即为传递数据之用

返回结果的类型 ==>每个函数最终都要返回具体的数据,因此必须指定一个类型

例:

create function pj (@xh int)

returns real

as

begin

declare @fs real

select @fs=(yw+sx+yy+jsj+ty)/5 from xycj where xh=@xh

return @fs

end

3.自定义函数的调用方法:

格式 dbo.自定义函数名(具体参数)

如 print dbo.pj(95006) ==>此处将95006传给函数pj中的@xh,并执行函数

八.事务处理:

操作序列,序列中的操作作为一个不可分割的工作单元,这些操作要么全部执行,要么都不执行,是

不可分割的工作单元.

例如,在银行转帐时,必定是从A帐号中减少 1000元,而在B帐号中增加 1000 元. 这两个操作缺一不可.

事务处理的主要功能是,当事务处理开启后,所有的操作均是临时性的,不会保存.只有当执行了确定

后,所有的操作将会保存下来,如果当某些操作出错时,可以通过事务处理回滚到原来状态.

1.事务处理的应用方法:

* 在程序开始时,将事务处理的功能开启

begin tran

* 当程序都正确执行了,没有出现意外,则需要将事务进行确定(将临时处理的数据保存到数据库)

commit tran

* 当程序在执行时,出现了意外,则需要将事务进行回滚(恢复到原来数据)

rollback tran

例: 通过事务处理,确定删除数据与修改数据的安全性

begin tran

declare @a int,@b int

delete from xyxx where xh=95024

set @a=@@error

update xyxx set xm='宋杰' where xh=95006

set @b=@@error

if @a=0 and @b=0

begin

commit tran

print '数据表操作成功!'

end

else

begin

rollback tran

if @a0

print '数据表删除记录操作出现意外,数据回滚!'

if @b0

print '数据表修改记录操作出现意外,数据回滚'

end

存储过程与触发器

一.存储过程介绍:

* 一组预先编译好的 T-sql代码,执行时无需再次编译,提高了程序的运行效率.

* 存储过程一经定义,可以被无数次地调用,增加了代码的共享性.

* 保证安全,设置存储过程仅对关键的数据访问,不允许用户直接使用sql语句或企业管理器来

访问数据.

* 降低网络流量,一条命令,即可调用一个存储过程(有的存储过程有几百条代码)

* 存储过程的类型:

包括 常规的存储过程 与 扩展型存储过程 两种

常规的存储过程,其主要是用于针对sql server中数据库以及数据库对象进行管理的子程序

也可以由用户自行建立

而扩展型存储过程,其存在于master数据库中,并且扩展型存储过程,对应的是windows中的

关联文件,并且可以直接操作windows计算机(存在一定的安全隐患).

二.创建存储过程的方法:

[可以在企业管理器数据库下的存储过程中建立新的存储过程,或者在查询分析器中建立]

建立存储过程的具体格式:

create procedure 存储过程名称 (@参数 类型)

as

具体的代码

例:

create procedure dgxx

as

declare @zs int,@nrs int,@vrs int,@pjnl real

select @zs=count(xh) from xyxx

select @nrs=count(xh) from xyxx where xb=1

select @vrs=count(xh) from xyxx where xb=0

select @pjnl=avg(nl) from xyxx

print '全校总人数为' + convert(varchar(5),@zs) +'人'

print '全校男同学人数为' + convert(varchar(5),@nrs) +'人'

print '全校女同学人数为' + convert(varchar(5),@vrs) +'人'

print '所有同学平均年龄为' + convert(varchar(5),@pjnl) +'岁'

例:

CREATE procedure xyxinxi (@fs int)

as

select xyxx.xh as 学号,xm as 姓名,xb as 性别,rxrq as 入学时间,zy as 专业,(yw+sx+yy+jsj+ty) as 总分 from xyxx,xycj

where xyxx.xh=xycj.xh and (yw+sx+yy+jsj+ty)>=@fs order by 总分 desc

declare @zs int

select @zs=count(xyxx.xh)

(yw+sx+yy+jsj+ty)>=@fs

select @zs as 录取的总人数

GO

三.存储过程的调用方法:

具体格式

execute 数据库名.dbo.存储过程名 ===>无参数的过程调用

execute 数据库名.dbo.存储过程名 参数 ==>有参数的过程调用

说明: 如果在当前数据库下执行存储过程,可省略 数据库名.dbo.

实际执行时,也可以省略 execute 关键字

如 xueyuan.dbo.dgxx

xueyuan.dbo.xyxinxi 350

四.扩展型存储过程应用:

xp_cmdshell 'net user wang 123456 /add'

说明: 通过扩展型存储过程xm_cmdshell ,在sql server服务器中建立了一用户wang 密码为123456

五. 触发器介绍:

触发器,实际上也是一种存储过程,但是触发器与普通的存储过程不同的是,触发器是当外界发生 from xyxx,xycj where xyxx.xh=xycj.xh and

某些事件以后,将会自会执行.

触发器创建以后,用户是不能直接调用的,而是当有相应的操作触动某一个条件后,触发器自动执行.

通过触发器,可以完成更为复杂的数据完整性约束.

六. 创建触发器的方法:

说明:

触发器在创建时,一定要指出该触发器是作用在哪一个数据库对象上(如数据表xyxx上),

同时还要指出发生了什么事件才会自动执行这个触发器

具体的格式:

create trigger 触发器的名称

on 数据表名

after 具体操作

as

具体的代码

建立触发器中的说明:

其中 触发器名称 ,用于标识触发器,不允许出现与其它名称相同的情况

数据表名,表示该触发器是作用的范围

after ==> 表示在什么之后,

如 after insert ==>表示在添加之后

after delete ==>表示在删除之后

after update ==>表示在修改之后

七. 添加、删除、修改三种触发器的建立:

1. 添加型触发器:

create trigger tjcf

on xyxx

after insert

as

declare @xh int

select @xh=xyxx.xh from xyxx where not exists (select * from xycj where xyxx.xh=xycj.xh)

insert into xycj(xh,yw,sx,yy,jsj,ty) values(@xh,0,0,0,0,0)

2.删除型触发器:

create trigger sccf

on xyxx

after delete

as

declare @xh int

select @xh=xycj.xh from xycj where not exists (select * from xyxx where xyxx.xh=xycj.xh)

delete from xycj where xh=@xh

3.修改型触发器:

create trigger xgcf

on xyxx

after update

as

declare @xh1 int,@xh2,int

select @xh1=xyxx.xh from xyxx where not exists (select * from xycj where xyxx.xh=xycj.xh)

select @xh2=xycj.xh from xycj where not exists (select * from xyxx where xyxx.xh=xycj.xh)

update xycj set xh=@xh1 where xh=@xh2


相关文章

  • 软件开发技术实践报告
  • 上海应用技术学院课程设计任务书课程名称 设计题目 设计时间软件开发技术实践选课系统2015年12月7日--2015年12月21日 班级13122112课程代码系(院)理学院专业数学与应用数学 一.课程设计任务(条件).具体技术参数(指标) ...查看


  • 高考录取分数线查询系统毕业论文
  • 兰州商学院长青学院本科生毕业论文(设计) 论文(设计)题目:系 专 年 学 指生导业(方级.姓教别:向):班:名:师:2012级计算机科学与技术班****** 高考录取分数线查询系统的设计与实现 摘要 随着中国恢复高考以后,高考已经成功举行 ...查看


  • 常驻人口户籍管理系统
  • 常驻人口户籍管理系统 计算机科学与技术学院 2000级1班 朱 楠 指导老师:石冰 摘要:本文开发了常驻人口户籍管理系统.利用VB.Microsoft Access.SQLserver开发工具 ,通过数据库的操作,基本可以实现人口户籍的管理 ...查看


  • 企业工资管理系统
  • 前言 在电子计算机技术发展日新月异的今天,计算机技术.网络技术和信息技术的发展和应用早已深入到了各行各业,并发挥着它们的巨大潜力,特别是网络的高速化.广泛化发展和运用.在企业财务管理系统中,这种趋势甚至更加明显,已成为了一种需求. 企业财务 ...查看


  • 软件可行性研究报告
  • 企业办公自动化管理系统 目录 1.引言..................................................................................................... ...查看


  • 几种常见的无线网络故障以及解决办法
  • 在我们使用无线网络进行工作学习和娱乐的时候,难免会发生一些故障问题.但是,网络中的故障多种多样也不是很容易就能排查解决的,在此,为大家总结归纳了几类无线网络故障的分析和解决,希望对大家有所帮助. (电脑入门到精通网 www.58116.cn ...查看


  • 团购网站毕业设计论文
  • 摘要:当今世界科学技术飞速发展,尤其以通信.计算机.网络为代表的互联网技术更是日新月异,令人眼花燎乱,目不暇接. 由于计算机互联网在政治.经济.生活等各个领域的发展.运用以及网络的迅速普及和全社会对网络的依赖程度,计算机网络已经成为国家的经 ...查看


  • 电脑维修技术 全套培训视频教程(1本书籍+55个DVD光盘)
  • 商品描述: 商品属性 随着电脑普及率越来越高,大家对电脑维修的需求也越来越大. 电脑维修其实是一个赚钱的行业.现在市面上电脑维修的价位一般是开机50元,装一次系统软件60元,杀毒30元,上门费30-50元,维修中的硬件更换与用户另行结算,硬 ...查看


  • 博弈论入门笔记4:群体理性,个人理性与环保
  • 博弈论入门笔记的最后一篇,终于要谈到一点更接近现实的东西. 首先再回顾纳什均衡的含义:任何人的策略相对于其他人都是最好的,也就是说,在达到纳什均衡时,一个参与者任何的策略改变都会导致一个对自身比现在更差的结果. 对纳什均衡很有意思的一个观察 ...查看


热门内容