存储过程
•
由用户使用
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