SQL SERVER触发器恢复方法、数据库
触发器
触发器是一种特殊类型的存储过程,它不同前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名称而被直接调用。触发器是一个功能强大的工具,它使每个站点可以在有数据修改时自动强制执行其业务规则。触发器可以用于SQL Server约束、默认值和规则的完整性检查。
当往某一个表格中插入记录、修改记录或者删除记录时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。在触发器中可以查询其他表格或者包括复杂的SQL语句。触发器和引起触发器执行的SQL语句被当作一次事务处理,如果这次事务未获得成功,SQL Server会自动返回该事务执行前的状态。和CHECK约束相比较,触发器可以强制实现更加复杂的数据完整性,而且可以参考其他表的字段。它的主要优点如下:
(1)触发器是自动的。当对表中的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。
(2)触发器可以通过数据库中的相关表进行层叠更改。如,可以在titles表的title-id列上写入一个删除触发器,以使其他表中的各匹配行采取删除操作。该触发器用title-id列作为惟一键,在titleauthor、sales及roysched表中对各匹配行进行定位。
(3)触发器可以强制限制。这些限制比用CHECK约束所定义的更复杂。与CHECK约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于10美元的书(存储在title表中)应用折扣(存储在discounts表中)的更新。
一、创建触发器
在SQL Server中,可以使用企业管理器或者Transact-SQL语句来创建触发器。在创建触发器之前应该考虑以下几个问题:
(1)CREATE TRIGGER语句必须是批处理中的第一个语句。将该批处理中随后的其它所有语句解释为CREATE TRIGGER语句定义的一部分。
(2)创建触发器的权限默认分配给表的所有者,且不能将该权限转给其他用户。
(3)触发器为数据库的对象,其名称必须遵循标识符的命名规则。
(4)虽然触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。
(5)虽然不能在临时表或系统表上创建触发器,但是触发器可以引用临时表。不应引用系统表,而应使用信息架构视图。有关更多信息,请参见信息架构视图。
(6)在含有用DELETE或UPDATE操作定义的外键的表中,不能定义INSTEAD OF和INSTEAD OF UPDATE触发器。
(7)虽然TRUNCATE TABLE语句类似于没有WHERE子名(用于删除行)的DELETE语句,但
相关文档:
至今未有成就,甚感彷徨。
并不是很突然的想学SQL,而是在之前说的那样,在我绕了一大圈之后,才知道自己也是一无所知,枉学了这么多年。
我一直想脱离学校的教育模式来自学,然而我并不承认学校的教育方式是一无所用的,至少学到的东西是实在的。从学校的角度来考虑, ......
SQL获取所有数据库名、表名、储存过程以及参数列表
1.获取所有数据库名:
(1)、Select Name from Master..SysDatabases order by Name
2.获取所有表名:
(1)、Select Name from SysObjects Where XType=''U'' orDER BY Name
XType='' ......
1.sql是一种脚本语言
2.sql可写脚本程序,但最重要的作用发挥在对数据库的操作上
3.sql server2005中的注释有两种/***/多行注释,--可以单行注释
4.sql中的自定义变量以@开头,系统变量以@@开头
5.sql中声明变量和VB类似,使用declare声明变量如:declare @i int,@j int,此语句声明了2个整形变量@i和@j
6.sql中的数据 ......
对于SQL 随机抽样我们常想到的就是newid(),但如果对于一个在百万、千万甚至更大海量数据表中抽样的话,简单的newid(),其性能,效率就不是很理想了。所以在这里有必要讨论一下,择优而用。
long_goods是一个百万数据的表,Ctrl+L执行以下语句:
--id_index是我为主键加的一个非聚焦索引
SELECT top 1&nb ......