存储过程 实例练习

一、简单存储过程

set ANSI_NULLS ON
--用于和NULL的比较,如:null=null在off时会返回   true,在on   时为false  
--SET   NOCOUNT  {   ON   |   OFF   }  使返回的结果中不包含有关受   Transact-SQL   语句影响的行数的信息。
--SET   XACT_ABORT   on 如果事务中发生错误,on   则会终止整个事务的执行,如果OFF,继续错误的下面一句

set QUOTED_IDENTIFIER ON
GO

IF OBJECT_ID ( 'SP_GetAdminRecord', 'P' ) IS NOT NULL
    DROP PROCEDURE SP_GetAdminRecord;
GO

(1)--简单
CREATE PROCEDURE [dbo].[SP_GetAdminRecord]
AS
select adminname,tel from f_admin
GO

execute SP_GetAdminRecord;

(2)--带参数
CREATE PROCEDURE [dbo].[SP_GetAdminRecord]
@adminname nvarchar(20),
@tel nvarchar(50)

AS
select adminname,tel from f_admin
where adminname=@adminname AND tel=@tel

GO

execute SP_GetAdminRecord @adminname='a%',@tel='123123477777777';

--execute SP_GetAdminRecord N'admin',N'123123477777777';

(3)----使用带有通配符参数的简单过程

 CREATE PROCEDURE dbo.SP_GetAdminRecord
@adminname nvarchar(50)= N'a%',
@tel nvarchar(70)=N'%'

AS
select adminname,tel from f_admin
where adminname LIKE @adminname
    AND tel LIKE @tel
GO

--execute SP_GetAdminRecord N'a%';
--或者 execute SP_GetAdminRecord N'a%',N'_7%';

(4)--使用变量,output传递参数
IF OBJECT_ID ( 'insert_bank', 'P' ) IS NOT NULL
    DROP PROCEDURE insert_bank;
GO
Create proc insert_bank
@name varchar(40),
@price float,
@count int,
@sumprice float output
--with encryption ---------加密
AS
 insert into product ([name],price,[count],sumpirce) Values(@name,@price,@count,@sumprice)
GO

declare @total_price int
exec insert_bank 'Zhangsan',20,100,@total_price output
print '总余额为'+convert(varchar,@total_price)
go

ps:存储过程的3种传回值: 

  1.以Return传回整数 
  2.以output格式传回参数 
  3.Recordset

  传回值的区别: 

  output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中。

posted @ 2010-04-16 15:23  liuwei0214  阅读(203)  评论(0)    收藏  举报