(4)存储过程(Stored procedures)
存储过程是用T-SQL语言编写成的SQL子例程,它存储于SQL服务器上供用户调用执行。与一般的SQL语句和批处理语句不同的是,存储过程是经过预编译的。当首次运行一个存储过程时,SQL Server的查询处理器将对其分析,并产生最终的执行方案。由于查询处理的大部分工作已经完成,所以以后执行存储过程时速度将会很快。执行存储过程时可带参数并可调用其他存储过程,执行完毕后返回信息以指示是否成功完成相应操作。存储过程有两种:一种是SQL服务器安装时自动建立的系统存储过程(系统过程),另一种是用户自己创建的存储过程。
系统过程是用于系统管理,并且为用户提供了从事数据库管理的一种途径。这些系统过程都是以sp_开头的,它们都放在master数据库中且隶属于sa(系统管理员) 。也有很多可以在任一个数据库中运行的系统过程。
常见的系统过程有:
Sp_addgroup 在当前数据库中建立一个数据库用户组
Sp_addlogin 建立一个SQL服务器用户
Sp_adduser 在当前数据库中增加一个用户
sp_changegroup 改变数据库用户组
Sp_dboption 查询或改变数据库系统设置
Sp_dropdevice 删除设备
Sp_dropgroup 删除组
Sp_droplogin 删除帐号
Sp_help 查询数据库对象及所有数据库信息
Sp_helpdb 查询数据库信息
Sp_helpdevice 查询设备信息
Sp_helpgroup 查询组信息
Sp_helpindex 查询给定表信息
Sp_helpuser 查询用户信息
Sp_lock 查询当前加锁信息
Sp_monitor 查询SQL服务器统计信息
Sp_password 改变登录帐号口令
Sp_spaceused 查询表中的行数、数据页数及空间大小
Sp_who 查询当前用户及过程信息
Sp_syntax 查询操作语法
Sp_configure 配置系统参数
例:
1> sp_helpdb
2> go
name db_size owner dbid created status
--------------------------------------------------------------------------
master 3.0 MB sa 1 Jan 01, 1900 no options set
model 2.0 MB sa 3 Jan 01, 1900 no options set
sybsystemprocs 10.0 MB sa 4 Oct 24, 1997 trunc log on chkpt
tele114 370.0 MB sa 5 Oct 24, 1997 select into/bulkcopy, trunc log on chkpt
tempdb 22.0 MB sa 2 May 05, 1998 select into/bulkcopy
(0 rows affected, return status = 0)
例:
1> sp_monitor
2> go
last_run current_run seconds
-------------------------- -------------------------- -----------
May 5 1998 4:09PM May 5 1998 4:13PM 224
(0 rows affected)
cpu_busy io_busy idle
------------------------- ------------------------- -------------------------
17(1)-0% 5(0)-0% 923(223)-99%
(0 rows affected)
packets_received packets_sent packet_errors
------------------------- ------------------------- -------------------------
21(9) 51(23) 0(0)
(0 rows affected)
total_read total_write total_errors connections
------------------- ------------------- ------------------- ------------------
947(1) 595(113) 0(0) 3(1)
(0 rows affected, return status = 0)
(5)触发器(Triggers)
触发器是一种特殊的存储过程,用来维护不同表中的相关数据的一致性。当在一张表中插入、删除和修改数据时,触发器就会触发另一个存储过程,从而保持数据的一致性。
(6)缺省与规则(Defaults and rules)
缺省是在数据录入时,若用户没有输入数据,SQL Server自动输入的值。
规则是可以理解为对数据库、某一列、某用户数据类型的限制。
三、SQL 查询语言
SQL不仅包括查询数据的有关命令,还包括创建数据库及其对象,增、删、改数据等功能。分别定义为数据查询语言,数据定义语言及数据操作语言。这里先介绍数据查询语言。其基本句法为:
Select select_list from table_list where search_conditions
1、简单查询
A、选择若干列
Select expression [,expression]... From table_list
B、选择若干行
查出电话号码以415到头的记录
Select * from code_1th where tel like '415%'
查询中消除值重复的行
Select distinct tel from code_1th
对Text 和 char 可用 like ,其中可用通配符‘%’及‘-’,分别代表多个字符和单个字符。
其他常用查询条件有:(出text类型除外)
大小比较 =、>、=、、!1
Having 类似于where , 但where 不能用聚集函数。
C、用Order by 对查询结果进行排序
Select type ,avg(price) from titles group by type order by avg(price)
D、Compute 子句
完成基于每一组中的值的聚集运算,聚集值作为一个新行出现在查询结果中。
Select type ,price advance from titles order by type compute sum(price), sum(advance) by type
四、数据库、数据库对象的增、删、改
1、数据库
x 打开数据库
Use tele114
x 创建数据库。拥有创建数据库权利的用户可以创建自己的数据库。
CREATE DATABASE tele114
ON tele114_def01=10,tele114_run01=200,tele114_idx01=200
LOG ON tele114_log01=80
x 删除数据库
Drop database tele114
x 修改数据库
Alter database tele114 on tele114_run02=100, tele114_idx02=100
2、表
x 建表
create table spec_code
(
No tinyint not null, /*特编号(0--99)*/
Name varchar(50) null, /*名称*/
Addr varchar(50) null, /*地址*/
Tel varchar(50) null, /*电话号码*/
StaffNo varchar(4) not null /*录入员工号*/
)
on segrun /*将表放在segrun段上*/
x 删除表
Drop tabel tele114_1th
x 修改表,在表中增加新的列(用这个命令增加的列必须允许null值)
Alter table friends_etc add country varchar(20 ) null
x 表级或列级约束
Create table my_publishers
(pub_id char(4),
Pub_name carchar(40).
Constraint my_chk_constraint
Check (pub_id in ('1389','0736','0877'))
Or (pub_name not like 'bad news books'))
x 指定默认值
Create table ny_titles
(title_id char(6t),
Title varchar(80),
Price money default null,
Total_sales int default (0))
x 指定Unique 和primary key 约束
Primary key 不允许空值,常用来产生唯一的聚集索引,unique 允许空值,常用来产生唯一的非聚集索引
Create table my_sales
(stor_id char(4),
Ord_num varchar(20),
Date datetime,
Unique clustered(stor_id,ord_num))
3、索引
x 建立索引
create unique clustered index code1thidx1 on code_1th(Code1,Name,UnitNo1,Used)
on segrun
Unique: 建立唯一性索引
Clustered : 建立聚集索引,使得数据行的逻辑顺序与物理顺序一致,查询速度较快;每个表仅允许建立一个唯一性索引。(非聚集索引nonclustered)
On segrun:将索引放在segrun上
x 删除索引: drop index code_1th.code1thidx1
4、 默认:当用户没有显示地为某一列赋值时,SQL SERVER 为该列插入的值
x 创建默认值CA,把默认值CA用到friends_etc表中的State列上
Creat default statedflt
Go
Sp_bindefault statedflt, "frends_etc.state"
go
x 断离默认
Sp_unbindefault "frends_etc.state"
x 删除默认
Drop default statedflt
5、规则:可以理解为对数据库、某一列、某用户数据类型的限制.规则中的任何变量名必须
冠以@,不能直接引用列或其他数据库对象。
x 创建规则并把他关联到用户定义的数据类型P#上
Create rule phonerule as @phone like 415[0-9][0-9][0-9][0-9]
Sp_bindrule phonerule ,"p#"
x 断离规则
Sp_unbindrule "p#"
x 删除规则
Drop rule phonerule
6视图:视图是从一个或多个基本表或其他视图上导出的表,可以在视图上进行增、删、改
x 创建视图
创建视图的句法为:
create view view_name
(column_1,...,column_n)
as select_statements
例:在authors表和publishers表上定义一个视图如下:
Create view cities (authorname, acity, publishername, pcity)
As select au_lname,authors.city, pub_name, publishers.city
From authors, publishers
x 通过使用Drop view 命令来撤消一个视图
Drop view view_name
