文章出處

  今天講下T-sql語法中存儲過程的用法,我們一開始學習數據庫語言的時候就是用一些簡單的insert,select等語法,但是隨著我們學習數據庫的深入,就會發現一些簡單的語法滿足不了我們的要求,比如處理一些業務邏輯,多表關聯的時候,還有就是雖然程序或是簡單的sql語句也會實現其效果,但是性能或是效率會很低。

  這時候我們就會用到T-sql中的存儲過程,存儲過程就像C#中的方法一樣,傳遞參數,執行一些操作,返回相應的值。

  我們用SQLSERVER2008自帶的AdventureWorks示例數據庫來講解。

  首先我們新建一個存儲過程,關鍵字為Procedure,示例代碼: 

create procedure proc_Sales_SalesReason
as
begin
    select * from Sales.SalesReason;
end

  我們新建的一個proc_Sales_SalesReason存儲過程,執行查詢操作,一般存儲過程命名為proc_+名稱,這樣有利于識別。

  執行存儲過程示例代碼:

execute proc_Sales_SalesReason

drop procedure  proc_Sales_SalesReason    --刪除存儲過程

  修改存儲過程的話用alter關鍵字。

  以上只是簡單的存儲過程,就想無參數的方法一樣,下面是帶參數的示例代碼:

create procedure proc_Sales_SalesReason
(@SalesReasonID int, 
@Name nvarchar(50), 
@ReasonType nvarchar(50), 
@ModifiedDate datetime)
as
begin
    insert into Sales.SalesReason(SalesReasonID, Name, ReasonType, ModifiedDate) 
    values(@SalesReasonID, @Name, @ReasonType, @ModifiedDate);
end

  這是一個執行插入數據的存儲過程,執行示例代碼:

execute proc_Sales_SalesReason 100,'text1','as','2011-12-12';

  以上講解的都是一些簡單存儲過程的用法,在這里只是起到拋磚引玉的作用,大家可以有時間好好研究下,去處理一些復雜的業務邏輯。

  下面我做了一個小示例

  select :按價格范圍來查詢
  要求:如果兩個參數均存在,則表示查詢該指定范圍的內容;
  若均不存在,則查詢所有
  若@PriceFrom參數存在,則,查詢>=@PriceFrom
  @priceTo存在,則<=@priceTo

create procedure proc_SelectProductsWithPriceRange
(
    @PriceFrom money,
    @priceTo money
)
as 
begin
    if @PriceFrom is not null
        begin
            if @priceTo is not null
                begin
                    select *from dbo.Products 
                    where Price between @PriceFrom and @priceTo;
                end
            else
                begin
                    select *from dbo.Products 
                    where Price>=@PriceFrom;
                end
        end;
    else
        begin
            if @priceTo is not null
                begin
                    select *from dbo.Products 
                    where Price<=@priceTo;
                end
            else
                begin
                    select *from dbo.Products 
                end
        end    
end;

  執行存儲過程:

execute proc_SelectProductsWithPriceRange 17,null

  其實這些代碼都是大學時候學習的時候整理的,現在寫這些算是去復習一下,也想去幫助那些剛剛踏入編程行業的學子們(大牛們請飄過),我想在年前把這兩年整理的一些編程知識系統的整理下來,當然都是一些簡單的,并附一些示例,希望幫助初學者去理解,還希望大家關注一下。。。

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()