格式:Create [Unique][Clustered|Nonclustered] Index IndexName On Table_Name(Column1,Column2..)
例1:在authors表上创立一个关于title_id列的聚集索引。 Create clustered Index cdx_title_id on authors(title_id) 例2:在titles表上的title_id列创立非聚集的唯一性索引。
Create Unique Nonclustered Index ucdx_title_id on titles(title_id) 例3:在auhtors表频繁访问的city 列和state列上创立组合非聚集索引。 Create Index ucdx_cityAndState on authors(city,state) 1.4 索引的删除
格式:Drop Index Databasename.tablename.Index_name 例:Drop Index authors.ucdx_cityAndState 1.5 索引的统计和更新 A:索引的统计
DBCC Show_Statistics(dbname.dbo.Table_name,Index_Name) 如:DBCC Show_Statistics(authors,cdx_title_id) B:索引的更新:
Update Statistics(dbname.dbo.tablename,index_name) 如:Update Statistics(pubs.dbo.authors,cdx_title_id)
第二节 视图
A.概述:虚拟的表或存储查询。 B.功能:通过视图可以实现 (1)将用户限定在特定的行上; (2)将用户限定在特定的列上;
(3)将多个表的列联接起来构成一个“表”; (4)聚合信息而非提供详细信息;
(5)可以使用视图更新表的数据,但关联表之间一般不可以; 2.1 创建视图
格式:Create view 视图名 [(列名)][with encryption] As select 语句 [with check option] 说明:A、with encryption :加密syscomments系统表项,该表项包含有Create view语句文本。 B、with check option:强制所有对视图进行的数据修改语句都要遵守select语句对视图设置的条件。
注意:(a) 定义视图的查询不可以包含Order by,Compute或Compute by 子句或者into关键字; (b) 不能在临时表上创建视图; 例1
/*在单个表上创立视图*/ Create view vw_student As
Select stuno,sname,entrancedate From student
Where entrancedate>'2002-01-01' Go
注:每个字段可以定义一个别名,表或其他对象也可创建别名 例2 创建一个视图用以显示学生的学号,姓名和所学的课程名称
Create view Vw_studentinfo As
Select a.StuNo as '学生学号',a.SName as '学生姓名',c.SourceName as '课程名称' From Student as a Join score as b On (a.StuNo=b.StuNo) Join source as c
On (b.SourceNo=c.SourceNo)
注:Join用来连接两个或多个表,on 参数指定连接条件 2.2 删除视图
Drop view vw_student 2.3 修改视图 例:
Alter view vw_studentinfo As
Select a.Sname as ?学生名称?,c.SourceName as ?课程名称?From Student as a Join Score as b On (a.StuNo=b.StuNo) Joio Source as c On(b.SourceNo=c.SourceNo) 2.4 通过视图修改数据 可以将视图看作表输入数据 例如
Create view vw_Source As
Select SourceNo as ?课程号?,SourceName as ?课程名?,SourceDesc as ?课程详细? From Source
Insert into vw_Source values(?102?,?VB?,?第二学期的重点课程?)
第七章Transact-SQL编程
第一节 变量
(1)局部变量
A.TSQL局部变量:是可以保存特定类型的单个数据值的对象。一般说来在一个批处理中被声明、定义,在这
个批处理(也可能是存储过程或触发器)中用SQL语言对这个变量赋值,或使用这个变量已经被赋予的值。
当批处理结束后,这个局部变量的生命周期就结束了。
作用:作为计数器在循环中使用;作为返回值;保存临时数据等; B.声明局部变量:
格式: Declare @变量名1 数据类型,@变量名2 数据类型…… 说明:Declare的使用:
(1)指派名称:第一个字符必为@+变量名; (2)指派系统提供或用户定义的数据类型和长度; (3)将值设置为NULL;
示例:Declare @myCount int C.给变量赋值:
Set 语句:如Set @myCount=100
Select语句:如 Select @myCount=100 综合示例 User Pubs Go
Declare @find varchar(30) Set @find=?Ring%?
Select au_lname,au_fname,phone From authors
Where au_lname like @find (2)全局变量
A)全局变量:变量名前用@@表示;在SQLServer7.0及以后的版本中,全局变量作为函数据形式被使用; B)一共30多个对于一般的用户来说,一般不用全局变量; C)SQLServer提供的系统全局变量不用声明直接使用 使用:也可声明自定义的全局变量(类似局部变量); 常用全局变量如下
@@CONNECTIONS : 返回自上次启动SQL Server以来连接或试图连接的次数,用其可让管理人员方便地了解今天所有试图连接服务器的次数。
@@DATEFIRST : 返回使用SET DATEFIRST命令而被赋值的DATAFIRST参数值。SET DATEFIRST命令用来指定每周的第一天是星期几。
@@SERVICENAME : 返回SQL Server正运行于哪种服务状态之下:如 MS SQLServer、MSDTC、SQLServerAgent。
@@TEXTSIZE : 返回SET语句的TEXTSIZE选项值SET语句定义了SELECT语句中text或image。数据类型的最大长度基本单位为字节。
@@ROWCOUNT : 返回受上一语句影响的行数,任何不返回行的语句将这一变量设置为0。 @@IDLE : 返回自SQL Server最近一次启动以来CPU处于空闭状态的时间长短,单位为毫秒。 @@IO_BUSY : 返回自SQL Server最后一次启动以来CPU执行输入输出操作所花费的时间(毫秒)。 @@CPU_BUSY : 返回自SQL Server最近一次启动以来CPU的工作时间其单位为毫秒。 @@DBTS : 返回当前数据库的时间戳值必须保证数据库中时间戳的值是惟一的。 @@CURSOR_ROWS : 返回最后连接上并打开的游标中当前存在的合格行的数量。 @@REMSERVER : 返回登录记录中记载的远程SQL Server服务器的名称。 @@VERSION : 返回SQL Server当前安装的日期、版本和处理器类型。 @@MAX_CONNECTIONS : 返回允许连接到SQL Server的最大连接数目。 @@PACK_RECEIVED : 返回SQL Server通过网络读取的输入包的数目。 @@NESTLEVEL : 返回当前执行的存储过程的嵌套级数,初始值为0。 @@LOCK_TIMEOUT: 返回当前会话等待锁的时间长短其单位为毫秒。 @@MAX_PRECISION : 返回decimal 和 numeric数据类型的精确度。 @@SERVERNAME: 返回运行SQL Server 2000本地服务器的名称。 @@PACK_SENT : 返回SQL Server写给网络的输出包的数目。 @@ERROR : 返回最后执行的Transact-SQL语句的错误代码。 @@TRANCOUNT : 返回当前连接中处于激活状态的事务数目。 @@FETCH_STATUS : 返回上一次FETCH语句的状态值。 @@SPID : 返回当前用户处理的服务器处理ID值。 @@IDENTITY : 返回最后插入行的标识列的列值。 @@PACKET_ERRORS : 返回网络包的错误数目。
@@TOTAL_ERRORS : 返回磁盘读写错误数目。 @@TOTAL_WRITE : 返回磁盘写操作的数目。 @@LANGID : 返回当前所使用的语言ID值。 @@LANGUAGE : 返回当前使用的语言名称。 @@TOTAL_READ : 返回磁盘读操作的数目。 @@TIMETICKS : 返回每一时钟的微秒数。 @@OPTIONS : 返回当前SET选项的信息。 @@PROCID : 返回当前存储过程的ID值。
第二节 流程控制命令
1) 块结构:Begin----End 2)If-else- 条件分支: 如: Use Pubs
Go --这是批处理标识符,表示上面的代码交给服务器编译
If (select avg(price) from titles where type=?mod_cook?)<15 --判断表中有此记录 Begin
Print ?下列书是优秀的烹调书籍?
Select substring(title,1,35) as title From titles Where type=?mod_book? End Else
Print ?这是价格较为昂贵的烹调书籍? 3). waitfor
Waitfor delay ?时间? 延迟多长时间 Waitfor time ?时间? 具体某个时间执行 例1:
waitfor delay ?00:00:03? --将在3秒钟之后执行select语句 select * from student 例2:
waitfor time ?22:30:02? --将在22:30:02s时执行select语句 select * from student1 4) While(条件语句)条件循环 示例:
Create table test(id int,name char(3)) Go Declare @fcount int set @fcount=0 while (@fcount<6) Begin
--向字段id编号及name添加字符 并转换为ASCII码对应的字符 Insert into Test values(@Fcount,CHAR(@Fcount+ASCII(?a?))) Set @Fcount=@Fcount+1 End
5) Goto
说明:用来改变程序执行的流程,使程序跳到标有标识和程序继续执行; 语法:Goto 标识符 示例 :分行打印字符1至5 Declare @Fcount int Begin
Select @Fcount=1 Label:
Print Cast (@Fcount as varchar) Select @Fcount=@Fcount+1 While @Fcount<6 Goto Label End
6) Return语句
说明:无条件终止查询、存储过程或批处理处理。存储过程或批处理中Return语句后面的语句都不执行;当在存储过程中使用Return语句时,此
语句可以指定返回给调用的应用程序、批处理或过程的整数值。如Return未指定值,则存储过程返回0。大多数存储过程按常规使用返回代码表示
存储过程的成功或失败。没有发生错误时存储过程返回0。任何非零值表示有错误发生。 语法:Return [integer_expression] (注:此处到讲解存储过程时再介绍) 7)Break 退出while循环 8)Continue 结束本次循环 9)Case表达式
格式:case 判断表达式(变量)/选择条件表达式 when 表达式/条件 then 语句 ………………
when 表达式 then 语句 end 例:
select name,chengji= case
when price<60 then ?不及格? when price>60 then ?及格? end
from student 10)批处理语句 Go
第三节 存储过程
1.存储过程的概述
存储过程是SQL语句的预编译集合,它存储在数据库内,可由应用程序通过一个调用执行,而且充许用户声明
变量、有条件执行以及其它强大的功能。使用存储过程可以使程序模块化,可以在服务器端更快的执行,可