程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 簡單sql存儲過程實例、儲過程實戰

簡單sql存儲過程實例、儲過程實戰

編輯:關於SqlServer

     實例1:只返回單一記錄集的存儲過程。

    銀行存款表(bankMoney)的內容如下

    Id

    userID

    Sex

    Money

    001

    Zhangsan

    30

    002

    Wangwu

    50

    003

    Zhangsan

    40

    要求1:查詢表bankMoney的內容的存儲過程

    create procedure sp_query_bankMoney
    as
    select * from bankMoney
    go
    exec sp_query_bankMoney

    注* 在使用過程中只需要把中的SQL語句替換為存儲過程名,就可以了很方便吧!

    實例2(向存儲過程中傳遞參數):

    加入一筆記錄到表bankMoney,並查詢此表中userID= Zhangsan的所有存款的總金額。

    Create proc insert_bank @param1 char(10),@param2 varchar(20),@param3 varchar(20),@param4 int,@param5 int output
    with encryption ---------加密
    as
    insert bankMoney (id,userID,sex,Money)
    Values(@param1,@param2,@param3, @param4)
    select @param5=sum(Money) from bankMoney where userID='Zhangsan'
    go
    在SQL Server查詢分析器中執行該存儲過程的方法是:
    declare @total_price int
    exec insert_bank '004','Zhangsan','男',100,@total_price output
    print '總余額為'+convert(varchar,@total_price)
    go

    在這裡再啰嗦一下存儲過程的3種傳回值(方便正在看這個例子的朋友不用再去查看語法內容):

    1.以Return傳回整數

    2.以output格式傳回參數

    3.Recordset

    傳回值的區別:

    output和return都可在批次程式中用變量接收,而recordset則傳回到執行批次的客戶端中。

    實例3:使用帶有復雜 SELECT 語句的簡單過程

      下面的存儲過程從四個表的聯接中返回所有作者(提供了姓名)、出版的書籍以及出版社。該存儲過程不使用任何參數。

    USE pubs
    IF EXISTS (SELECT name FROM sysobjects
    WHERE name = 'au_info_all' AND type = 'P')
    DROP PROCEDURE au_info_all
    GO
    CREATE PROCEDURE au_info_all
    AS
    SELECT au_lname, au_fname, title, pub_name
    FROM authors a INNER JOIN titleauthor ta
    ON a.au_id = ta.au_id INNER JOIN titles t
    ON t.title_id = ta.title_id INNER JOIN publishers p
    ON t.pub_id = p.pub_id
    GO

      au_info_all 存儲過程可以通過以下方法執行:

    EXECUTE au_info_all

    實例4:使用帶有參數的簡單過程

    CREATE PROCEDURE au_info
    @lastname varchar(40),
    @firstname varchar(20)
    AS
    SELECT au_lname, au_fname, title, pub_name
    FROM authors a INNER JOIN titleauthor ta
    ON a.au_id = ta.au_id INNER JOIN titles t
    ON t.title_id = ta.title_id INNER JOIN publishers p
    ON t.pub_id = p.pub_id
    WHERE au_fname = @firstname
    AND au_lname = @lastname
    GO

      au_info 存儲過程可以通過以下方法執行:

    EXECUTE au_info 'Dull', 'Ann'
    -- Or
    EXECUTE au_info @lastname = 'Dull', @firstname = 'Ann'
    -- Or
    EXECUTE au_info @firstname = 'Ann', @lastname = 'Dull'

    實例5:使用帶有通配符參數的簡單過程

    CREATE PROCEDURE au_info2
    @lastname varchar(30) = 'D%',
    @firstname varchar(18) = '%'
    AS
    SELECT au_lname, au_fname, title, pub_name
    FROM authors a INNER JOIN titleauthor ta
    ON a.au_id = ta.au_id INNER JOIN titles t
    ON t.title_id = ta.title_id INNER JOIN publishers p
    ON t.pub_id = p.pub_id
    WHERE au_fname LIKE @firstname
    AND au_lname LIKE @lastname
    GO

      au_info2 存儲過程可以用多種組合執行。下面只列出了部分組合:

    EXECUTE au_info2
    -- Or
    EXECUTE au_info2 'Wh%'
    -- Or
    EXECUTE au_info2 @firstname = 'A%'
    -- Or
    EXECUTE au_info2 '[CK]ars[OE]n'
    -- Or
    EXECUTE au_info2 'Hunter', 'Sheryl'
    -- Or
    EXECUTE au_info2 'H%', 'S%'

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved