一、视图

      视图是一虚拟表,该表中的记录是一个查询语句執行后所得到的查询结果所构成的。字段值来源於其他被引用表或视图.在經常需要查詢相同字段內容時就可以使用視圖。

使用视图的好处:

    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)

      

posted on 2008-10-13 10:19  Blade  阅读(458)  评论(0编辑  收藏  举报