【SQLSERVER】存储过程基础

1.声明变量
DECLARE   @F001   SMALLINT ,
   
          @F002   INTEGER ,
   
          @F003   VARCHAR ( 20 ),
             
@F004   CHAR ( 20 ),
   
          @F002   MONEY

2.赋值语句
set   @F001   =   space ( 40 )

3.条件判断(IF...ELSE)
If  condition  Begin
    
[  statements   ]
END
ELSE   BEGIN
    
[  elseifstatements  ]
END

4.多分支判断(case...when...then...else...end)
SET   @F011   =
CASE
       
WHEN   [ testexpression1 ]   THEN    @F001
       
WHEN   [ testexpression2 ]   THEN    @F002
       
WHEN   [ testexpression3 ]   THEN    @F003
       
WHEN   [ testexpression4 ]   THEN    @F004
END

5.循环(while)
While  condition  Begin
   
[  statements  ]
End

6.动态定义游标
SET   @strSQL   =   '  DECLARE  name_cursor  CURSOR  FOR   '   +   @inSQL
EXEC   ( @strSQL )

7.遍历游标
FETCH   NEXT   FROM  name_cursor  into   @F001 , @F002
WHILE    @@FETCH_STATUS   =   0   BEGIN

       
FETCH   NEXT   FROM  name_cursor  into   @F001 , @F002

END
说明:FETCH_STATUS检索到数据返回0,失败返回-1,可判断是否滚动未到结尾。

8.获得游标行数
SET   @RECCNT   =   @@ROWCOUNT

9.事务处理
BEGIN   distributed   transaction

WHILE   @@TRANCOUNT   >   0
       
commit   transaction

10.字符串连接
SET   @m_sql   =   @m_sql   +   '  Where F001 =  '''   +   @F001   +   ''''
SET   @m_sql   =   @m_sql   +   '  F002 =  '   +   CONVERT ( varchar , @F002 )

11.创建临时表存储外部数据表
说明:临时过程用 # 和 ## 命名,可以由任何用户创建。创建过程后,局部过程的所有者是唯一可以使用该过程的用户。
CREATE   TABLE  #DMPARHED
(FMCD   
int ,
FMNAM  
varchar ( 50 ),
MGYO1  
smallint ,
constraint  DMPARHED_P  primary   key  (FMCD))
SET   @aSQL   =   ''
SET   @aSQL   =   @aSQL   +   ' INSERT INTO #DMPARHED '
SET   @aSQL   =   @aSQL   +   '  SELECT FMCD,FMNAM,MGYO1 FROM '
SET   @aSQL   =   @aSQL   +   '  OPENQUERY(Lk_MDB_NEO32,  '' SELECT FMCD,FMNAM,MGYO1 FROM DMPARHED '
SET   @aSQL   =   @aSQL   +   '  WHERE SYSNO = 1 '' ) '
execute ( @aSQL )

创建临时表的另类方法:
select  a.name,a.password  from
with
as  temp1
select   *   from  emp
(
select   *   from  temp1
union
select   *   from  temp1) a
where  a.name = ' hao '

12.存储过程的调用及返回值
(1)存储过程的声明
CREATE   PROCEDURE  name_produce
    
@F001    VARCHAR ( 20 ),
           
@F002    SMALLINT  OUTPUT
(2)VB.NET调用存储过程
Private  SqlCmd  As   New  OleDb.OleDbCommand

SqlCmd.CommandText 
=   " prNK3020SC03 "
SqlCmd.CommandType 
=  CommandType.StoredProcedure

Dim  parampre1  As  OleDb.OleDbParameter  =  SqlCmd.Parameters.Add( _
         
New  OleDb.OleDbParameter( " @F001 " , OleDb.OleDbType.VarChar,  20 , _
         ParameterDirection.Input))
Dim  parampre2  As  OleDb.OleDbParameter  =  SqlCmd.Parameters.Add( _
        
New  OleDb.OleDbParameter( " @F002 " , OleDb.OleDbType.SmallInt))
parampre2.Direction 
=  ParameterDirection.Output

SqlCmd.Parameters(
" @F001 " ).Value  =  aF001
SqlCmd.Parameters(
" @F002 " ).Value  =  aF002
SqlCmd.ExecuteNonQuery()
aF002 
=  SqlCmd.Parameters( " @F002 " ).Value.ToString()
(3)存储过程调用存储过程
DECLARE   @C001         VARCHAR ( 20 ),
             
@C002         SMALLINT
EXEC  name_produce  @C001 , @C002  output

CREATE   PROCEDURE  dbo.getUserName
@UserID   int ,
@UserName   varchar ( 40 ) output
as
set  nocount  on
begin
if   @UserID   is   null   return
select   @UserName = username
from  dbo. [ userinfo ]
where  userid = @UserID
return
end

13.Update语句常见错误总结
--
Update  name_table  set
       F001 
=   @F181 ,
       F002 
=   @F182
Where
       F003 
=   @F003
-- ×
Update  name_table
       F001 
=   @F181 ,
       F002 
=   @F182
Where
       F003 
=   @F003
-- ×
Update  name_table  set
       F001 
=   @F181 ,
       F002 
=   @F182 ,
Where
       F003 
=   @F003
-- ×
Update  name_table  set
       ,F001 
=   @F181
       ,F002 
=   @F182
Where
       F003 
=   @F003

14.Insert语句常见语法错误总结
--
INSERT   INTO  name_table(
,KEY_FIELD,BUSYOCD
)
Values (
@F001 , @F002
)
-- ×
INSERT   INTO  name_table(
F001,F002
)
Values (
,
@F001 , @F002
)
-- ×
INSERT   INTO  name_table(
F001,F002
)
Values (
@F001 , @F002 ,
)
-- ×
INSERT   name_table(
F001,F002
)
Values (
@F001 , @F002
)

 

转至:http://www.cnblogs.com/sekihin/archive/2007/05/28/762511.html 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值