存储过程
•由用户使用CREATE PROCEDURE语句在当前数据库中创建
•数据库所有者拥有使用CREATE PROCEDURE语句的默认权限
语法
CREATE PROC[EDURE] procedure_name
创建存储过程示例:
无参数
CREATE PROCEDURE Titles_1389 AS
PRINT '此代码显示出版商1389 出版的标题'
SELECT * FROM titles WHERE pub_id = '1389'
有参数
CREATE PROCEDURE Titles_Pub
@v_pubid char(4)
AS
SELECT * FROM titles WHERE pub_id = @v_pubid
EXECUTE 语句用来运行用户定义的存储过程。
语法
EXEC[UTE] procedure_name
示例
有参数
EXECUTE Titles_Pub '0877'
创建触发器
•触发器可以通过企业管理器或者查询分析器来创建。
•语法:
CREATE TRIGGER Trigger_name
ON table
[WITH ENCRYPTION]
FOR [DELETE, INSERT, UPDATE]
AS Sql_statements
INSERT 触发器示例
alter trigger checkroyalty
on roysched
for insert,update as
if (select max(royalty) from inserted) > 30
begin
print 'royaltytrigger:版权费不能超过 30'
print '请将版权费修改为小于 30 的值'
rollback transaction
end
列级 UPDATE 触发器示例
create trigger noupdatepayterms
on sales
for update as
if update (payterms)
begin
print '不能修改订单的付费条款'
rollback transaction
end
触发器定义中的 IF UPDATE (列名)子句可用来确定 INSERT 或 UPDATE 语句是否影响到表中的一个特定列。无论何时,当列被赋值时,该子句即为 TRUE。
DELETE 触发器示例
create trigger nodelete9901
on pub_info
for delete as
if (select pub_id from deleted) = 9901
begin
print '不能删除出版商 9901 的详细信息'
rollback transaction
end