存储过程
1,设定参数可选sql语句:
create procedure [dbo].[proname]
@flag nvarchar(2)
if (@flag='1')
select * from table_name
if (@flag='2')
select id from table_name
return
2.在存储过程中引用另一个存储过程的数据
例12-3 在该存储过程中使用了OUTPUT 保留字
首先创建存储过程
use pubs
go
if exists select name from sysobjects
where name = 'titles_sum' and type = 'p'
drop procedure titles_sum
go
use pubs
go
create procedure salequa @stor_id char 4 ,@sum smallint output
as
select ord_num, ord_date, payterms, title_id, qty
from sales
where stor_id = @stor_id
select @sum = sum qty
from sales
where stor_id = @stor_id
go
然后在Query Analyzer 中调用例12-3 的存储过程
declare @totalqua smallint
execute salequa '7131',@totalqua output
if @totalqua<=50
select '销售信息'='销售等级为3 销售量为'+rtrim cast @totalqua as varchar 20
if @totalqua>50 and @totalqua<=100
select '销售信息'='销售等级为2 销售量为'+rtrim cast @totalqua as varchar 20
if @totalqua>100
select '销售信息'='销售等级为1 销售量为'+rtrim cast @totalqua as varchar 20
运行结果为
ord_num ord_date payterms title_id qty
-------------------- --------------------------- ------------ -------- ------
N914008 1994-09-14 00:00:00.000 Net 30 PS2091 20
N914014 1994-09-14 00:00:00.000 Net 30 MC3021 25
P
P
P
P
6 row s affected
销售信息
-----------------------------------------
销售等级为1 销售量为130
1 row s affected
管理存储过程
如果在创建存储过程时使用了WITH ENCRYPTION 选项那么无论是使用Enterprise都是看不見的
若增加OUTPUT 保留字到EXECUTE 语句中便可显示返回参数result 的值OUTPUT
要求参数值被作为一个变量传送而不是作为一个常量
如果我们提供三个字符串来执行这一存储过程我们将看不到字符串相加的结果虽
然Select 语句用来对result 变量赋值但result 结果并没有显示再:
create procedure strconnect
@str1 varchar(20) ,
@str2 varchar(20) ,
@connect varchar(40) output
as
select @connect=@str1 + @str2
return
declare @result varchar(40)
execute strconnect 'I am', ' John', ' string'
select 'The result'=@result