存储过程

语句格式
---------------------------

 if exists (select * from sysobjects where id = OBJECT_ID('[t]') and OBJECTPROPERTY(id, 'IsUserTable') = 1) DROP TABLE [t]
 CREATE TABLE [t] (  [id] [int] NOT NULL , [T1] [nvarchar] (50) NULL , [T2] [nvarchar] (50) NULL )

 INSERT [t] ( [id] , [T1] , [T2] ) VALUES ( 8 , 'A' , '001' )
 INSERT [t] ( [id] , [T1] , [T2] ) VALUES ( 9 , 'D' , '001' )
 INSERT [t] ( [id] , [T1] , [T2] ) VALUES ( 10 , 'F' , '001' )
 INSERT [t] ( [id] , [T1] , [T2] ) VALUES ( 11 , 'D' , '002' )
 INSERT [t] ( [id] , [T1] , [T2] ) VALUES ( 12 , 'F' , '002' )
 INSERT [t] ( [id] , [T1] , [T2] ) VALUES ( 13 , 'F' , '003' )

----
--不带参数
CREATE PROCEDURE Temp_T
as
select * from T

exec Temp_T

---------------------------------------------------------------------------------------------
--带参数
CREATE PROCEDURE Temp_T(@Temp1 as varchar(10),@Temp2 as varchar(10))
as
select * from T where T1=@Temp1 and T2=@Temp2

exec Temp_T 'A','001'

drop PROCEDURE Temp_T

--参数默认值
CREATE PROCEDURE Temp_T(@Temp1 as varchar(10)='A',@Temp2 as varchar(10)='001')  --可以是任意多个
as
select * from T where T1=@Temp1 and T2=@Temp2

exec Temp_T
exec Temp_T 'A','002'

drop PROCEDURE Temp_T


--带返回值的
1.OUTPUT
CREATE PROCEDURE Temp_T(@Temp1 as varchar(10)='F',@Temp2 as varchar(10) OUTPUT)
as
select @Temp2=T2 from T where T1=@Temp1

DECLARE @SC as varchar(10)
exec Temp_T 'F',@SC OUTPUT
PRINT @SC

drop PROCEDURE Temp_T

2.RETURN
2.1 
CREATE PROC IsItOK(@OK VARCHAR(10))
AS
IF @OK='OK'
   RETURN 0
ELSE
   RETURN -100

DECLARE @SC INT
EXEC @SC=IsItOK 'OK'
PRINT @SC
EXEC @SC=IsItOK 'NotOK'
PRINT @SC

2.2
CREATE PROCEDURE Temp_T(@Temp1 as varchar(10)='F',@Temp2 as varchar(10) OUTPUT)
as
select @Temp2=T2 from T where T1=@Temp1
if Exists(SELECT * FROM T where T1=@Temp1)
   RETURN 0

DECLARE @SC as varchar(10), @Temp as int
exec @Temp=Temp_T 'F',@SC OUTPUT
PRINT @SC
PRINT @Temp

注意:RETURN只能返回整型(int) 0-表示成功,-99到-1之间的值是保留值(系统),
-100或者更小的值来返回失败的状态(自定义)


---------------------------------------------------------------------------------------------
--将事务写入存储过程中
Eg:
zjcxc(邹建)老大的解决办法:如下
CREATE PROCEDURE [Insert_BillId]
(@货名            [varchar](10),
 @发货单位[varchar](40),
 @编号[varchar](13)output,
 @返回内容[varchar](40) output)

AS
begin tran
select 编号=right(100000001+isnull(max(编号),0),8)
from wzxx with(tablockx)
where  名称  = @货名 AND 发货单位 = @发货单位
   and ([编号] ='' or [编号] is null )
if @@rowcount=0
begin
    set @返回内容 = '没有符合条件的数据!'
rollback tran
return
end

    UPDATE [aaa].[dbo].[wzxx]
    SET  [编号] = @编号
    WHERE 名称  = @货名 AND 发货单位 = @发货单位
          and ([编号] ='' or [编号] is null )
if @@rowcount=0 or @@error<>0
begin
    set @返回内容 = '没有符合条件的数据!'
rollback tran
return
end
commit tran
go

 

---------------------------------------------------------------------------------------------
--加密的存储过程
CREATE PROCEDURE Temp_T
WITH ENCRYPTION   --加密关键字
as
select * from T

---------------------------------------------------------------------------------------------
--查看存储过程中的代码(加密的不行)
sp_helptext Temp_T

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值