一、视图
视图是一虚拟表,该表中的记录是一个查询语句執行后所得到的查询结果所构成的。字段值来源於其他被引用表或视图.在經常需要查詢相同字段內容時就可以使用視圖。
使用视图的好处:
1、简化查询语句
2、增加可读性
3、方便程序维护
4、增加数据的安全性和保密性。主要是根据不同的用户可以创建不同的视图,用户只能查看和修改其所能看到的视图中的数据,而真正的表中数据是不可见和不可访
创建视图:(VIEW关键字创建,其他详细参数见详视图创建结构说细说明)
CREATE VIEW 视图名称
WITH ENCRYPTION(可以对视图进行加密,因为视图信息都存在INFORMATION_SCHEMA.VIEWS中可通过SELECT *
FROM INFORMATION_SCHEMA.VIEWS 得到所有视图,如果进行了加密处理视图不会存入表中)
WITH SCHEMABINDING(可对视图与数据表进行绑定,以防刪除及修改表或字段引起视图错误)
AS
SQL語句
GO
修改视图:
ALTER VIEW 视图名称
AS
SQL語句
GO
刪除视图:
DROP VIEW 视图名称
更新视图中的记录和表操作相同,一般不会对视图进行更改操作
注意事项:
SQL语句中不能包括 Compute 、Compute By 、 Order By (除非在Select子名里有top子句)、Option 、Into等子名或关键字
执行视图:
Select * From 视图名称
二、存储过程
存储过程一是组预先写好能实现某种功能的T-SQL程序,也是一种数据库对象,是在数据库应用中运用得十分广泛的一种数据对象。用户可以通过存储过程的名字并给出参数来执行它。
使用存储过程优点:
1、执行速度快效率高
2、模块式编程.程式中可以多次调用,但一次修改可应用所有调用
3、减少网络流量
4、安全性。当用户要方问一个或多个表,但没有存取权限时,可设计个存储过程来存取这此数据中的数据,也可对不同权限用用户使用不同的存
储过程。
存储过程的分类
1、系统存储过程(System stored procedures)----一般以"SP_"开头,是由系统自动建立的,不要对其进行修改或删除。
2、扩展存储过程(Extended stored procedures)---一般以"XP_"开头,允许使用其他编辑语言创建自己的外部文化存储过程,其内容并不
存在SQL_SERVER中,而是以DLL形式单独存在.此功能可能在以后SERVER版本中废除
3、用户自定义存储过程(User-defined stored procedures)---由用户自行创建的存储过程,可以输入参数、向客户端返回表格或结果、
消息等,也可以返回输出参数,用户自定义存储过程又分为T-SQL存储过程和CLR存储过程两种.
4、T-SQL存储过程--------保存T-SQL语句的集合,可以接受和返回用户提供的参数
5、CLR存储过程----------针对.NET Framework方法的引用,可以接受和返回用户提供的参
创建存储过程:(以PR_开头定义存储过程名称)
CREATE PROC 存储过程名称
@参数一 参数类型(如int ,varchar(15)等) output(用output可返回任何类型数据)
AS
BEGIN
declare @变量(定义变量)
SQL語句
return @变量(返回的参数要用变量来接收)
print @变量
END
GO
修改存储过程:
ALTER PROC 存储过程名称
AS
BEGIN
SQL語句
END
GO
刪除存储过程:
DROP PROC 存储过程名称 (删除存储过程时,会把此存储过程中包含的所有存储过程都删除,不能进行某一单独的存)
执行存储过程:
exec 存储过程名称
注意事项
1、存储过程中参数最大数目为2100个
2、存储过程最大可达128M
3、存储过程中没有指定架构名,则默认为数据库的架构名
4、存储过程中最多嵌套32层
创建CLR存储过程
三、触发器
觸發器實際上是一種特殊的存儲過程,執行某些特定的T-SQL語句時自動執行的
触发器優點:
1、完成比約束更加復雜的數據約束
2、檢查所做的SQL是否允許
3、修改其祂數據表里的數據
4、調用更多的存儲過程
5、發送SQL MAIL
6、自定義的錯誤信息
7、更改原本要操作的SQL語句
8、防止數據表結構更改或數據表被刪除
觸發器分類:
DML觸發器:當數據庫服務器中發生數據操作語言(Data Manipulation Language)事件時招待的存儲過程。分為After
(SQL執行後再觸發)和Instead of(SQL執行前觸發)。執行時會創建二個特殊表,一個放新值,一個放舊值
DDL觸發器:向應數據定義語言(Data Definition Language)事件時執行的存儲過程。一般用於招待數據庫中的管理任務。
如審核和規范數據庫操作、防止數據庫表結構修改等。
注意事項:
1、After觸發器只能用于數據表中,Instead Of觸發器可以用於數據表和視圖上,但都不可建立在臨時表上
2、一個數據表可有多個觸發器,但一個觸發器只能對應一個表。
3、在一個數據表中,對數據庫(如Insert、Upfate、Delete)而言可以建立多個After觸發器,但Instead Of對每個操作只能建立一個
4、當數據表中有Instead Of和After多個觸發器時,Instead Of能激活,After不一定能激活
5、Truncate Table語句雖然類似Delete語名可以刪除記錄,但祂不可以激活Delete業型的觸發器
6、WritetExt語句不能觸發Insert和Update型觸發器
7、不同的SQL語句,可以觸發同一個觸發器,如Insert和Update語句都可以激活同一個觸發器
創建觸發器:
系統會創建一個INSERTED的臨時表新內容 、一個DELETED的臨時表存放要舊內容。Update Insert可從INSERTED中取值,DELETE
可從DELETED中取值。
CREATE TRIGGER 觸發器名稱
ON 數據表名或視圖名稱
AFTER、INSTEAD OF(觸發器類型) INSERT、DELETE、UPDATE(觸發條件)
AS
Declare
@參數一,@參數二
SET @參數一=(Select 參數名稱 From Inserted)(在INsert處發時,可以查找要Insert字段值)
BEGIN
SQL語句、存儲過程等
END
GO
當一個數據表中觸發器越多時,就要在存儲過程[sp_settriggerorder]中指定一個最先執行和最后執行的觸發器
sp_settriggerorder '觸發器名','激活次序','激活動作'
如:Exec sp_settriggerorder '觸發器名','Frist','Insert'
取消觸發器順序,只要把他們設為None觸發器即可
激活觸發器的動作必須和觸發器內部的激活動作一致 After Insert觸發器,只能為Insert操作設置激活順序,不能為Delete操作設置順序
另外:在存儲過程中,可用@@IDENTITY獲得剛插入記錄的標識值cast(@@IDENTITY as varchar)