SQLSERVER命令总结(二)

2015-07-24 07:31:17 · 作者: · 浏览: 2
过程在服务器端执行,执行速度快。

存储过程分为:系统存储过程,系统存储过程。

存储过程语法:

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

as

任意数量的T-SQL语句

例如:

create procedure stu_name @stuname char(10)

as

select * from stu

调用存储过程 exec 存储过程名 参数

例如:exec stu_name 'aa'

事务

--显示事务

Create table aaa

(

Aid int ,

Aname char(10),

Asex char(2) check(asex in (‘m’,’n’))

)

Set xact_abort on

Begin transaction

Intsert into aaa values(101,’aa’,’n’)

Intsert into aaa values(102,’bb’,’m’)

Intsert into aaa values(103,’cc’,’n’)

Intsert into aaa values(104,’dd’,’a’)

Intsert into aaa values(105,’ee’,’m’)

If @@error = 0

Commit

Else

Rollback

Go

Select * from aaa

Drop table aaa

--隐性事务

Set xact_abort on

Set implicit_transactions on

Create table aaa

(

Aid int ,

Aname char(10),

Asex char(2) check(asex in (‘m’,’n’))

)

Intsert into aaa values(101,’aa’,’n’)

Intsert into aaa values(102,’bb’,’m’)

Intsert into aaa values(103,’cc’,’n’)

Intsert into aaa values(104,’dd’,’a’)

Intsert into aaa values(105,’ee’,’m’)

Commit

--默认提交事务

Create table aaa

(

Aid int ,

Aname char(10),

Asex char(2) check(asex in (‘m’,’n’))

)

Intsert into aaa values(101,’aa’,’n’)

Intsert into aaa values(102,’bb’,’m’)

Intsert into aaa values(103,’cc’,’n’)

Intsert into aaa values(104,’dd’,’a’)

Intsert into aaa values(105,’ee’,’m’)

/*-------------------------------------------------------------------

Commit :提交事务中的一切操作,使得事务对数据库的修改有效

Rollback:回滚事务中的一切操作,使得事务对数据库的操作无效

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

事务控制语句

1. 设置隐性事务模式

1) set implicit_transactions on启动隐性事务模式

2) set implicit_transactions off 关闭隐性事务模式

2. 设置自动回滚模式

1) set xact_abort on 当事务中任意一条语句产生运行时错误,整个事物将中止,并整体回滚。

2) set xact_abort off 当事务中语句产生运行时错误,将中止本条语句并且回滚本条语句。

注意:set xact_abort 的设置是在执行或运行时设置,而不是在分析时设置。

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

首次执行下列语句都会自动启动一个隐性事务:

Alter table,create,delete,drop,fetch(读取),grant(授予),insert,open,revoke(撤销),select,truncate table,update

事务中不可以使用的语句:

1. 数据库创建:create database

2. 数据库修改:alter database

3. 数据库删除:drop database

4. 数据库备份:dump database,backup database

5. 数据库还原:load database,restore database

6. 事务日志备份:dump transaction,backup log

7. 事务日志还原:load transcation,restore log

8. 配置:reconfigure

9. 磁盘初始化:disk init

10. 更新统计数据:updata statistics

11. 显示或设置数据库选项:sp_dboptin

游标

游标:允许用户能够从select语句查询的结果集中,逐条访问纪录,可以根据用户需要逐行的显示、修改、删除这些记录的数据访问处理机制。(游标就是数据表上的指针)

使用游标的步骤: 

(1) 声明游标

declare 游标名 cursor for select 语句

(2) 打开游标

open 游标名

1) 当游标被打开时,指针会自动指在第一行;

2) 打开游标后,如果@@error=0表示游标打开操作成功;

3) 打开游标后,可以用@@cursor_rows返回纪录行数;

(3) 处理数据:

a) 移动到当前行并读取数据
fetch游标名

b) 删除当前行数据
delete from 表名/视图名 where current of游标名

c) 修改当前行数据
update from表名/视图名 set 列名=表达式 where current of 游标名

(4) 关闭游标

close 游标名

(5) 释放游标

deallocate 游标名

游标类型:

(1)static:静态,当用户A察看表中记录的同时,如果有用户B修改表中记录,A用户将不会看到B修改的纪录,只看A使用open打开表时所看到的纪录。

(2)Dynamic:动态,当用户A察看表中记录的同时,如果有用户B修改表中记录,A用户将看到B修改的纪录,也就是表中记录会不断的刷新,但是会耗费较大的系统资源。

(3)Forward Only:仅向前,游标仅能向前滚动。

(4)Scroll:滚动,游标可以前后左右滚动。

select * from student

/*打开游标,读取数据*/

declare c_stu cursor keyset for select * from student

open c_stu

if @@error = 0

print '学生总数' + convert(char(5),@@cursor_rows)

else

print '读取学生数出错!'

close c_stu

deallocate c_stu

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

--keyset:键集游标,当游标打开时,在tempdb数据库