SQL SERVER 存儲過程基礎集(轉載)

 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
)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章