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

P3087a 1993-05-29 00:00:00.000 Net 60 PS1372 20

P3087a 1993-05-29 00:00:00.000 Net 60 PS2106 25

P3087a 1993-05-29 00:00:00.000 Net 60 PS3333 15

P3087a 1993-05-29 00:00:00.000 Net 60 PS7777 25

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