详解SQLServer中DDL触发器和索引视图

索引视图:

创新互联公司主要从事成都做网站、成都网站制作、成都外贸网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务孝昌,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792

一般视图都虚表,即视图本身不存储数据,而且是一个查询,当访问视图时,SQL SERVER会自动根据视图的定义来访问基表数据。具有***的聚集索引的视图,

索引视图本身会存储数据,可以加快查询速度,但会增加数据修改的开销。所以索引视图适用的修改少而查询多的表。创建索引视图时,索引视图的***个索引

必须是CLUSTERED和UNIQUE。

索引视图的创建:

 
 
 
  1. CREATE TABLE dbo.t1  
  2. (  
  3. USERID VARCHAR(50),   
  4. USERNAME VARCHAR(256)  
  5. );  
  6. go  
  7. CREATE TABLE dbo.t2  
  8. (  
  9. USERID VARCHAR(50),   
  10. DepartID VARCHAR(50)  
  11. );  
  12. GO  
  13. CREATE TABLE dbo.t3  
  14. (  
  15. DepartID VARCHAR(50),   
  16. DepartName VARCHAR(256)  
  17. );  
  18. GO  
  19. CREATE VIEW dbo.USERINFO  
  20. WITH SCHEMABINDING  
  21. AS 
  22. SELECT a.USERID, a.USERNAME, c.DEPARTID, c.DEPARTNAME   
  23. FROM dbo.t1 a, dbo.t2 b, dbo.t3 c   
  24. WHERE a.USERID = b.USERID   
  25. AND b.DEPARTID = C.DEPARTID  
  26. GO  
  27. CREATE UNIQUE CLUSTERED INDEX IX_USERINFO_USERIDDEPARTID ON dbo.USERINFO(USERID, DEPARTID) 

SQL Server 中的DDL触发器

DDL触发器可以在整数据库范围内对对象的定义、修改、删除而触发执行的触发器。可以数据库级别对数据库对象进行控制和审记。或者服务器级别的触发器,如用户登录的审记。

DDL触发器事件定义:

 
 
 
  1.  
  2.     type 
  3.     date-time 
  4.     spid 
  5.     name 
  6.     name 
  7.     name 
  8.     name 
  9.     name 
  10.     name 
  11.     type 
  12.     command 
  13.  

DDL触发器的创建:

 
 
 
  1. CREATE TABLE dbo.t4  
  2. (  
  3. USERNAME VARCHAR(256),   
  4. TSQL VARCHAR(MAX),  
  5. CDATE DATETIME  
  6. );  
  7. GO  
  8. CREATE TRIGGER tr_dbDDL  
  9. ON DATABASE   
  10. FOR   
  11. DROP_TABLE, ALTER_TABLE, CREATE_TABLE,   
  12. CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE  
  13. AS 
  14. DECLARE @xdata XML;  
  15. SELECT @xdata  = EVENTDATA();  
  16. ROLLBACK;  
  17. INSERT INTO dbo.t4(USERNAME, TSQL, CDATE)  
  18. SELECT @xdata.value('(/EVENT_INSTANCE/UserName)[1]', 'nvarchar(max)') AS dbUserName,   
  19. @xdata.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)') AS T_SQL,   
  20. GETDATE() AS CDATE;  
  21.  
  22. GO  
  23. use master  
  24. go  
  25.  
  26. CREATE TABLE dbo.t5  
  27. (  
  28. USERNAME VARCHAR(256),   
  29. TSQL VARCHAR(MAX),  
  30. CDATE DATETIME  
  31. );  
  32. GO  
  33. ALTER TRIGGER tr_svrddl  
  34. ON ALL SERVER  
  35. FOR   
  36. CREATE_DATABASE, ALTER_DATABASE, DROP_DATABASE,   
  37. DDL_LOGIN_EVENTS   
  38. AS 
  39. DECLARE @xdata XML;  
  40. SELECT @xdata  = EVENTDATA();  
  41.  
  42.  
  43. INSERT INTO dbo.t4(USERNAME, TSQL, CDATE)  
  44. SELECT @xdata.value('(/EVENT_INSTANCE/LoginName)[1]', 'nvarchar(max)') AS dbUserName,   
  45. @xdata.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)') AS T_SQL,   
  46. GETDATE() AS CDATE;  
  47. GO 

分享标题:详解SQLServer中DDL触发器和索引视图
转载来源:http://www.hantingmc.com/qtweb/news24/133974.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联