`
William.K
  • 浏览: 5862 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多
第一章  创建数据库

1.创建数据库
Create database SHUJK
On primary
(
name='SHUJK_data',
Filename='E:\DATABASESQL\SHUJK_data.mdf',
Size=5mb,
Maxsize=15mb,
fileGrowth=1mb

)
Log on
(
Name='SHUJK_log',
Filename=' E:\DATABASESQL SHUJK_log.ldf',
Size=2mb,
Maxsize=5mb,
fileGrowth=15%
) //更改 数据库 的区分大小写属性

创建的数据库中区分大小写
create database test  COLLATE  Chinese_PRC_CS_AS 
数据库中区分大小写
alter database test  COLLATE  Chinese_PRC_CS_AS

恢复默认的不区分大小写
alter database test  COLLATE  Chinese_PRC_CI_AS
alter database books  COLLATE  Chinese_PRC_CI_AS
2删除数据库
USE  pubs—此处不允许删除当前数据库,所以要先让其变为非当前数据库
Drop  DATABASE  SHUJK
3创建表
USE SHUJK
Create table BG1
(
QUEUE1 INT NOT NULL  PRIMARY KEY,‘--可空列不可添加为主键‘
QUEUE2 VARCHAR(10),
Q3 CHAR UNIQUE
)
4.删除表

drop table BG1
5.为 表 添加 约束
5.1主键约束
Alter table BG1
   ADD CONSTRAINT PK_QUEUE1 PRIMARY KEY (QUEUE1)
5.2 唯一约束
Alter table BG1
ADD CONSTRAINT UK_QUEUE1 UNIQUE(QUEUE1)
5.3添加默认值约束
Alter table BG1
ADD CONSTRAINT DF_QUEUE2 DEFAULT(‘28’) FOR QUEUE2
5.4取值范围约束
Alter table BG1
ADD CONSTRAINT ck_QUEUE2 check(QUEUE1>0)
Alter table BG1
ADD CONSTRAINT ck2_QUEUE2 check(QUEUE1 between 3 and 6)
5.5外键约束
Alter table BG1
Add constraint FK_Q3 foreign key (Q3) REFERENCE titles(UID)
外键 Q3引用的是titles表格中的主键

5.6删除约束
Alter table BG1
drop cinstraint 约束名 如:FK_Q3
注意:1.一定要注意某列是否可为null
2.add constraint PKname primary key(列名)
3.add constraint fkname foreign key(本表列) references 表2(主键) 4.add constraint ckname check(列>1)
5.add constraint default(‘默认值’) for 列
6.add constraint unique(列名)


第2章  简单查询语句
2.1 逻辑运算符
And , or,  not
在where 语句后可使用and , or
2.2 Insert 语句
2.2.1 INSERT INTO Students (SName,SAddress,SGrade,SEmail,SSEX)
VALUES ('张青裁','上海松江',6,'ZQC@Sohu.com',0)
向选中列中插入单行
2.2.2 INSERT INTO TongXunLu (姓名,地址,电子邮件)
SELECT SName,SAddress,SEmail
FROM Students
向选中列中插入多行
2.2.3
Insert into 表1 (列名1, 列名2, 列名~)
Select 列1值,列2值,列3值 union all
Select 列1值,列2值,列3值 union all
Select 列1值,列2值,列3值
有序(all)插入多行
2.3 select 语句
2.3.1 select * into NEWBG11 from BG1
2.3.2 SELECT IDENTITY(数据类型,标识种子,标识增长量) AS 列名,*
INTO 新表
FROM 原始表
同时插入标识列identity(int, 1,1)

2.4 update 语句
2.4.1 Update <表名> Set <列名 = 更新值> [Where <更新条件>]
2.5 delete 语句
Delete From <表名> [Where <删除条件>]
2.6.1 TRUNCATE TABLE Students
2.6.2 delete table students
2.7 SELECT
2.7.1 SELECT    <列名> -此处可进行[运算,聚合], 赋值,
AS   ‘新列名’-此处可指定一个新列名
FROM      <表名>
[WHERE    <查询条件表达式>]
[ORDER BY <排序的列名>[ASC 升序或DESC降序]]
2.7.2 使用’ = ‘来命名列
SELECT '姓名' = FirstName+'.'+LastName
FROM Employees
2.7.3 赋值
Cursor中使用
Fetch next Select @temp=name from BG1
2.8 限制行数的查询
2.8.1 限制固定行数
SELECT TOP 5 SName, SAddress
FROM Students WHERE SSex = 0

2.8.2 按照比例限制行数
SELECT TOP 20 PERCENT SName, SAddress
FROM Students WHERE SSex = 0
2.9 多表相加
SELECT Au_Lname +'.' +Au_fName AS EMP
From Authors Union
SELECT fName +'.'+ LName AS EMP
From Employee
ORDER BY EMP DESC
2.11 按多列排序
SELECT StudentID As 学员编号, Score As 成绩
FROM Score
WHERE Score>60
ORDER BY Score,CourseID
2.12 字符串函数
2.13 数学函数
2.14 系统函数


第三章  高级查询语句



3.1 模糊查询
3.1.1模糊查询—LIKE
查询时,字段中的内容并不一定与查询内容完全匹配,只要字段中含有这些内容
3.1.2 通配符
通配符 解释 示例
‘_’ 一个字符 A Like 'C_'
% 任意长度的字符串 B Like 'CO_%'
[ ] 括号中所指定范围内的一个字符 C Like '9W0[1-9]'
[^] 非括号中所指定的一个字符 D like ‘%[A-D][^1-2]'
3.1.3 between
Between 1 and 3 , between '2000-1-1' and '2004-12-31’
3.1.4 in
WHERE SAddress IN ('北京','广州','上海')
3.1.5 is null
3.2 聚合函数
3.2.1 sum(), avg(), max(), min(), count(*)
Select count(*)from BG1 where chengji>80
--查询pubs数据库authors表,要求按照州进行分类,查找每个州有几名作者
select state, count(distinct au_lname+au_fname) from authors
group by state
count(distinct 列名)省去了一次分组
3.3 分组查询
3.3.1 group by
GROUP BY子句搜集数据行到各个组中,统计函数为各个组计算统计值
SELECT CourseID, AVG(Score) AS 课程平均成绩
FROM Score
GROUP BY CourseID
3.3.2 HAVING
HAVING子句去掉不符合其组搜索条件的各组数据行
SELECT CourseID, AVG(Score) AS 课程平均成绩
FROM Score
GROUP BY CourseID
having AVG(score)>80
3.4 多表联接
3.4.1 内联接
返回连个表中都存在的,并且值相同行才返回
SELECT S.SName,C.CourseID,C.Score
From Score AS C 此处为原表名
INNER JOIN Students AS S 此处为与之联接的表名
ON C.StudentID = S.Scode

3.4.2 内联接等价查询
SELECT  Students.SName, Score.CourseID, Score.Score
FROM Students,Score
WHERE  Students.SCode = Score.StudentID
         3.4.3 多表联接
SELECT  S.SName AS 姓名, CS.CourseName AS 课程, C.Score AS 成绩
FROM  Students AS S
INNER JOIN  Score AS C ON (S.SCode = C.StudentID)
INNER JOIN  Course AS CS ON (CS.CourseID = C.CourseID)
3.4.4 左外连接
从连接的左表中返回所有行,不管右边有没有相匹配的行。对于不匹配的行,将返回null
3.4.5 完全外联接
返回两个表中的所有行,不管是否存在匹配行。
在存在匹配行的地方,对行进行联接。
在不存在匹配行的地方,无论那个表不包含对应的值,都将返回null
3.4.6 交叉联接

3.5 子查询
3.5.1 SELECT * FROM stuInfo
WHERE stuAge>( SELECT stuAge FROM stuInfo where stuName='李斯文')
括号内为子查询
GO
外面的查询称为父查询,括号中嵌入的查询称为子查询
3.5.2 很多表联接都可以用子查询替代,但是表链接不一定能替代子查询
SELECT stuName FROM stuInfo
   WHERE stuNo IN[not in ]
    (SELECT stuNo FROM  stuMarks WHERE writtenExam=60)
GO
3.5.3 EXISTS子查询
IF EXISTS(SELECT * FROM sysDatabases [sysobjects/表,索引,触发器,存储过程,函数]WHERE name=’stuDB’)
  DROP DATABASE stuDB
CREATE DATABASE stuDB



第四章  T-SQL编程与事务管理
4.1 变量
4.1.1  局部变量:
局部变量必须以标记@作为前缀 ,如@age
局部变量的使用也是先声明,再赋值

     4.1.2  声明变量
DECLARE   @变量名  数据类型
例如:
DECLARE @name varchar(8)
DECLARE @seat int
4.1.3为变量赋值
SET @变量名 =值
     SELECT  @变量名 = 值
例如:
SET @name=‘张三’
SELECT @name=stuName FROM stuInfo WHERE stuNo=‘s25302’ 


4.1.4  全局变量:
全局变量必须以标记@ @作为前缀,如@@version
全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值
全局变量明细表:
变量 (值类型) 含义
@@ERROR int 最后一个T-SQL错误的错误号
@@IDENTITY 数值 最后一次插入的标识值
@@LANGUAGE 当前使用的语言的名称
@@MAX_CONNECTIONS 可以创建的同时连接的最大数目
@@ROWCOUNT 受上一个SQL语句影响的行数
@@SERVERNAME 字符型 本地服务器的名称
@@TRANSCOUNT 当前连接打开的事务数
@@VERSION 字符型 SQL Server的版本信息
4.2 逻辑控制语句
4.2.1 IF-ELSE语句
SQL中的IF-ELSE语句
IF (条件)
  BEGIN
    语句1
    语句2
    ……
  END
ELSE
BEGIN
    语句1;
    语句2;
    ……
  END
ELSE是可选部分
如果有多条语句,才需要BEGIN-END语句块
4.2.3 WHILE循环语句
SQL中的WHILE语句
WHILE (条件)
  BEGIN
    语句1
    语句2
    ……
    BREAK
  END
BREAK表示退出循环
如果有多条语句,才需要BEGIN-END语句块
4.2.4 CASE-END多分支语句
print  'ABCDE五级显示成绩如下:'
SELECT stuNo,(原始列)
   成绩(新列名)= CASE 
                  WHEN writtenExam(列名)<60 THEN 'E'(新列将显示的值)
                  WHEN writtenExam BETWEEN 60 AND 69 THEN 'D'
                  WHEN writtenExam BETWEEN 70 AND 79 THEN 'C'
                  WHEN writtenExam BETWEEN 80 AND 89 THEN 'B'
                  ElSE    'A'
              END
      FROM stuMarks(原表名)
4.3 游标
游标是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
4.3.1 使用游标举例
/*定义只读游标*/
DECLARE user_csr CURSOR READ_ONLY FOR
SELECT UID,Uname FROM bbsUsers WHERE Ustate=0 ORDER BY UID
/*定义变量*/
DECLARE @UID int,@Uname varchar(15)

/*打开游标*/
OPEN user_csr
/*执行第一次数据读取操作*/
FETCH NEXT FROM user_csr INTO @UID,@Uname
/*循环游标读取操作*/
WHILE @@FETCH_STATUS=0
BEGIN  利用 游标取得的第一条数据进行数据运算)
PRINT 'uid:'+convert(varchar(6),@UID)+' uname:'+@Uname
--利用游标取得下一条数据,将其赋值到局部变量中
FETCH NEXT FROM user_csr INTO @UID,@Uname
END
/*关闭游标*/
CLOSE user_csr
/*释放游标*/
DEALLOCATE user_csr

4.4 事务管理
4.4.1 F定义
事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作
这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行
事务是一个不可分割的工作逻辑单元
4.4.2 举例
转帐过程就是一个事务。
它需要两条UPDATE语句来完成,这两条语句是一个整体,如果其中任一条出现错误,则整个转帐业务也应取消,两个帐户中的余额应恢复到原来的数据,从而确保转帐前和转帐后的余额不变,即都是1001元。
4.4.3 事务的语句结构
T-SQL使用下列语句来管理事务:
a..开始事务:BEGIN TRANSACTION
b.提交事务:COMMIT TRANSACTION
c.回滚(撤销)事务:ROLLBACK TRANSACTION
d.保存回滚点 SAVE TRANSACTION

一旦事务提交或回滚,则事务结束。
4.4.4判断某条语句执行是否出错:
使用全局变量@@ERROR;
@@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计;
如: SET @errorSum=@errorSum+@@error
4.4.5了解事务的分类:
BEGIN TRANSACTION
/*--定义变量,用于累计事务执行过程中的错误--*/
DECLARE @errorSum INT
SET @errorSum=0  --初始化为0,即无错误
/*--转帐:张三的帐户少1000元,李四的帐户多1000元*/
UPDATE bank SET currentMoney=currentMoney-1000
   WHERE customerName='张三'
SET @errorSum=@errorSum+@@error
UPDATE bank SET currentMoney=currentMoney+1000
   WHERE customerName='李四'
SET @errorSum=@errorSum+@@error  --累计是否有错误
IF @errorSum<>0  --如果有错误
  BEGIN
    print '交易失败,回滚事务'
    ROLLBACK TRANSACTION
  END 
ELSE
  BEGIN
    print '交易成功,提交事务,写入硬盘,永久的保存'
    COMMIT TRANSACTION  
  END
GO
print '查看转帐事务后的余额'
SELECT * FROM bank 
GO

4.4.6 事务的特性
事务必须具备以下四个属性,简称ACID 属性:
a. 原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行
b. 一致性(Consistency):当事务完成时,数据必须处于一致状态
c. 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
d. 永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性


第五章 存储过程与自定义函数
5.1 存储过程
5.1.1 存储过程的定义:
用来执行管理任务或应用复杂的业务规则
存储过程相当于Java语言中的方法
存储过程可以带参数,也可以返回结果
5.1.2 存储过程的分类
a. 系统存储过程
由系统定义,存放在master数据库中
系统存储过程的名称都以“sp_”开头或“xp_”开头
b. 用户自定义存储过程
由用户在自己的数据库中创建的存储过程
5.1.3 系统存储过程明细
系统存储过程 说明
sp_databases 列出服务器上的所有数据库
sp_helpdb 报告有关指定数据库或所有数据库的信息
sp_renamedb 更改数据库的名称
sp_tables 返回当前环境下可查询的对象的列表
sp_columns 返回某个表列的信息
sp_help 查看某个表的所有信息
sp_helpconstraint 查看某个表的约束
sp_helpindex 查看某个表的索引
sp_stored_procedures 列出当前环境中的所有存储过程
sp_password 添加或修改登录帐户的密码
sp_helptext 显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本















5.1.4 系统存储过程用法
  EXEC  过程名  [参数]
EXEC sp_databases  列出当前系统中的数据库
EXEC  sp_renamedb 'Northwind','Northwind1' 修改数据库的名称(单用户访问)
USE stuDB
GO
EXEC sp_tables 当前数据库中查询的对象的列表
EXEC sp_columns stuInfo  返回某个表列的信息
EXEC sp_help stuInfo  查看表stuInfo的信息
EXEC sp_helpconstraint stuInfo查看表stuInfo的约束
EXEC sp_helpindex stuMarks查看表stuMarks的索引
EXEC sp_helptext 'view_stuInfo_stuMarks' 查看视图的语句文本
EXEC sp_stored_procedures  查看当前数据库中的存储过程
5.1.5 调用命令提示符(windows 控制台)的存储过程
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO
USE master
EXEC xp_cmdshell 'mkdir d:\bank', NO_OUTPUT
EXEC xp_cmdshell 'dir D:\bank\' --查看文件
5.2 创建存储过程
5.2.1创建不带参数的存储过程
CREATE PROCEDURE proc_stu
  AS
GO
5.2.2带输入参数的存储过程
CREATE PROCEDURE proc_stu
  @writtenPass int,  传入值1= 默认值1
  @labPass int    传入值2 =默认值2
  AS
GO
5.2.3 调用带参数的存储过程
   a. EXEC proc_NAME  传入值1, 传入值2
b. EXEC proc_name @labPass=传入值1,@writtenPass=传入值2
只给第二个参数赋值 的方法
c. EXEC proc_name @writtenPass=传入值2

5.2.4 带输出参数的存储过程
    CREATE PROCEDURE proc_stu
    @notpassSum int OUTPUT, 输出参数
  @writtenPass int=60,  
    @labPass int=60 
AS
5.2.5 调用 带输出参数的存储过程
DECLARE @sum int   需要定义一个变量来结束传出的数值
EXEC proc_stu @sum OUTPUT ,64 
5.2.6 带 返回值 的存储过程
  只可以是整型
只有一个
5.3 使用临时表

5.4 自定义函数
与编程语言中的函数类似,SQL Server 2005 用户定义函数是接受参数、执行操作(例如复杂计算)并将操作结果以值的形式返回的例程。返回值可以是单个标量值或结果集。
5.4.1 创建方法
CREATE FUNCTION dbo.fun_hello
( @name VARCHAR (8) )
RETURNS  VARCHAR(20)
AS
BEGIN
      RETURN @name + ',您好!'
END
GO
Select dbo.fun_hello (参数)
5.4.2 使用函数的方法
   select dbo.fun_hello('欧阳夏丹') as '问好'
5.5 存储过程和自定义函数比较






存储过程 自定义函数
一般涉及复杂的业务逻辑 用于定义可重用的功能,一般不涉及业务逻辑
用 EXECUTE 语句执行 在查询语句中调用
返回值不能被直接引用 返回值可以被直接引用
可以包含RETURN语句,返回值可有可无 必须包含RETURN语句,返回单个值








第六章  常用存储过程、视图、索引器与触发器

6.1 视图
6.1.1 定义:
视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上
视图中并不存放数据,而是存放在视图所引用的原始表(基表)中
同一张原始表,根据不同用户的不同需求,可以创建不同的视图
6.1.2 视图的用途
筛选表中的行
防止未经许可的用户访问敏感数据
降低数据库的复杂程度
将多个物理数据库抽象为一个逻辑数据库
6.1.3 创建视图
CREATE VIEW view_stuInfo_stuMarks
  AS
    SELECT 姓名=stuName,学号=stuInfo.stuNo,
      笔试成绩 =writtenExam,  机试成绩=labExam,
            平均分=(writtenExam+labExam)/2
    FROM stuInfo LEFT JOIN stuMarks
    ON stuInfo.stuNo=stuMarks.stuNo
GO
6.1.4 使用视图
SELECT * FROM view_stuInfo_stuMarks
6.2 索引
6.2.1 定义:是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据 。
6.2.2 作用:索引的作用:通过使用索引,可以大大提高数据库的检索速度,改善数据库性能。
6.2.3 类型
唯一索引:唯一索引不允许两行具有相同的索引值
主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空
聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个
非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个
使用T-SQL语句创建索引的语法:

CREATE [UNIQUE唯一索引] [CLUSTERED聚集索引|NONCLUSTERED非聚集索引] 
    INDEX   index_name
     ON table_name (column_name…)
      [WITH FILLFACTOR=x]

6.2.4 创建索引示例
  USE stuDB
GO
IF EXISTS (SELECT name FROM sysindexes
          WHERE name = 'IX_writtenExam')
   DROP INDEX stuMarks.IX_writtenExam 
/*--笔试列创建非聚集索引:填充因子为30%--*/
CREATE NONCLUSTERED INDEX IX_writtenExam
     ON stuMarks(writtenExam)
   WITH FILLFACTOR= 30
GO
/*-----指定按索引 IX_writtenExam 查询----*/
SELECT * FROM stuMarks  (INDEX=IX_writtenExam)
    WHERE writtenExam BETWEEN 60 AND 90
6.3 触发器
6.3.1定义:是一种特殊类型的存储过程,基于某个表或视图(触发表、触发视图)的一个或多个列创建,用于监控它们的insert、update、delete操作(触发操作),当发生以上操作时自动执行事先定义的步骤,可进行复杂的数据完整性监测和约束
   6.3.2 INSERTED 表和deleted 表
A. 触发器触发时:
系统自动在内存中创建deleted表或inserted表
只读,不允许修改;触发器执行完成后,自动删除
B. inserted 表
临时保存了插入或更新后的记录行
可以从inserted表中检查插入的数据是否满足业务需求
  如果不满足,则向用户报告错误消息,并回滚插入操作
C. deleted 表
临时保存了删除或更新前的记录行
可以从deleted表中检查被删除的数据是否满足业务需求
  如果不满足,则向用户报告错误消息,并回滚插入操作
明细:
修改操作 inserted表 deleted表
增加(INSERT)记录 存放新增的记录 ------
删除(DELETE)记录 ----- 存放被删除的记录
修改(UPDATE)记录 存放更新后的记录 存放更新前的记录
6.3.3创建触发器示例1
CREATE TRIGGER trig_transInfo 触发器名称
ON transInfo 表名
  FOR INSERT  触发的类型
   AS
   DECLARE @type char(4),@outMoney MONEY
   DECLARE @myCardID char(10),@balance MONEY
   SELECT @type=transType,@outMoney=transMoney,
         @myCardID=cardID FROM inserted 从Inserted表中取值
     IF (@type='支取')
        UPDATE bank SET currentMoney=currentMoney-@outMoney
             WHERE cardID=@myCardID
    ELSE
        UPDATE bank SET currentMoney=currentMoney+@outMoney
             WHERE cardID=@myCardID
    …..
GO
6.3.4
UPDATE触发器
CREATE TRIGGER trig_update_bank
ON bank
  FOR UPDATE
   AS
      DECLARE @beforeMoney MONEY,@afterMoney MONEY 
      SELECT @beforeMoney=currentMoney FROM deleted   从deleted表中取值
      SELECT @afterMoney=currentMoney FROM inserted    从insertedd表中取值

      IF ABS(@afterMoney-@beforeMoney)>20000
        BEGIN
            print '交易金额:'+convert(varchar(8),
                ABS(@afterMoney-@beforeMoney))
            RAISERROR ('每笔交易不能超过2万元,交易失败',16,1)
            ROLLBACK TRANSACTION
         END
GO

6.3.5列级 UPDATE 触发器
CREATE TRIGGER trig_update_transInfo
ON transInfo
  FOR UPDATE
   AS
      IF UPDATE(transDate 列名)
         BEGIN
            print '交易失败.....'
            RAISERROR (‘安全警告:交易日期不能修改,
                           由系统自动产生',16,1)
            ROLLBACK TRANSACTION   
         END
GO
6.3.6 查看触发器
(1)使用SQL Server管理平台查看触发器信息。
在SQL Server管理平台中,展开服务器和数据库,选择并展开表,然后展开触发器选项,右击需要查看的触发器名称,如图9-4所示,从弹出的快捷菜单中,选择“编写触发器脚本为→create到→新查询编辑器窗口”,则可以看到触发器的源代码。
(2)使用系统存储过程查看触发器。
 系统存储过程sp_help、sp_helptext和sp_depends分别提供有关触发器的不同信息。其具体用途和语法形式如下。
 sp_help:用于查看触发器的一般信息,如触发器的名称、属性、类型和创建时间。
  sp_help  ‘触发器名称’
 sp_helptext:用于查看触发器的正文信息。
  sp_helptext  ‘触发器名称’
 sp_depends:用于查看指定触发器所引用的表或者指定的表涉及到的所有触发器。
  sp_depends  ‘触发器名称’
  sp_depends  ‘表名’
6.3.7 修改触发器
 通过SQL Server管理平台、存储过程,可以修改触发器的正文和名称。
1.使用SQL Server管理平台修改触发器正文。
在管理平台中,展开指定的表,右击要修改的触发器,从弹出的快捷菜单中选择“修改”选项,则会出现触发器修改窗口,如图9-5所示。在文本框中修改触发器的SQL语句,单击“语法检查”按钮,可以检查语法是否正确,单击“执行”按钮,可以成功修改此触发器。
 2. 修改DML触发器的语法形式如下:
ALTER TRIGGER schema_name.trigger_name
  ON (table|view)
[WITH <dml_trigger_option>[,...n]]
  (FOR|AFTER|INSTEAD OF)
  {[DELETE][,][INSERT][,][UPDATE]}
[NOT FOR REPLICATION]
  AS {sql_statement[;][...n]|EXTERNAL NAME <method specifier>[;]}
  <dml_trigger_option>::=[ENCRYPTION][&lEXECUTE AS Clause >]
  <method_specifier> ::=assembly_name.class_name.method_name
 修改DDL触发器的语法形式如下:
  ALTER TRIGGER trigger_name
  ON {DATABASE|ALL SERVER}[WITH <ddl_trigger_option> [,...n]]
  {FOR|AFTER}{event_type[,...n]|event_group}
AS {sql_statement[;]|EXTERNAL NAME <method specifier> [;]}
  <ddl_trigger_option>::=[ENCRYPTION][&lEXECUTE AS Clause > ]
  <method_specifier> ::=assembly_name.class_name.method_name
修改的示例
 例9-13  修改触发器。
程序清单如下:
CREATE TRIGGER s_reminder
ON S
  WITH ENCRYPTION
  AFTER INSERT, UPDATE
AS
RAISERROR ('不能对该表执行添加、更新操作', 16, 10)
ROLLBACK
GO
 -- 下面修改触发器.
ALTER TRIGGER s_reminder
  ON S
  AFTER INSERT
  AS
  RAISERROR ('不能对该表执行添加操作', 16, 10)
  ROLLBACK
GO
使用sp_rename命令修改触发器的名称。
       sp_rename命令的语法形式如下:
  sp_rename oldname,newname
6.3.8 删除触发器
 由于某种原因,需要从表中删除触发器或者需要使用新的触发器,这就必须首先删除旧的触发器。只有触发器所有者才有权删除触发器。删除已创建的触发器有三种方法:
(1)使用系统命令DROP TRIGGER删除指定的触发器。其语法形式如下:
    DROP TRIGGER { trigger } [ ,...n ]
(2)删除触发器所在的表。删除表时,SQL Server将会自动删除与该表相关的触发器。
(3)在SQL Server管理平台中,展开指定的服务器和数据库,选择并展开指定的表,右击要删除的触发器,从弹出的快捷菜单中选择“删除”选项,即可删除该触发器。

7.Top 子句
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics