1. 程式人生 > 實用技巧 >SQL儲存過程詳細介紹及語法

SQL儲存過程詳細介紹及語法

------------恢復內容開始------------

宣告:儲存過程並不推薦在開發中使用,某裡巴巴制定的開發寶典中明令禁止使用儲存過程。

那為什麼還要學?被逼無奈,維護舊版系統不想全部推翻重來,只有硬著頭皮要弄懂,才改的動。

建立儲存過程

  SQL Server建立儲存過程:

    create procedure 過程名

      @parameter 引數型別

      @paramater 引數型別  

    as

    begin

    end

執行儲存過程

  execute 過程名

例項

1.不帶引數的儲存過程

    

create procedure proc_sql1
as 
begin 
    delclare @i int 
    set @i = 26
    while @i <1
        begin 
            print char(ascii('a') + @i) + '的ASCII碼是:' + cast(ascii('a') +  @i as varchar(5))
            set @i  = @i +1
        end
end

exec proc_sql1

輸出結果:

 1 a的ASCII碼是: 97  
 2 b的ASCII碼是: 98  
 3 c的ASCII碼是: 99  
~~~~~
26 z的ASCII碼是:122

2.資料查詢功能不帶引數的儲存過程

create procedure proc_sql2
as 
begin 
    select * from employee where  salary > 2000
end

execute proc_sql2

  

在儲存過程中可以包含多個select語句,顯示姓名中含有“張”字的職工資訊及其所在的倉庫資訊

create procedure pro_sql3
as 
begin 
    select * from employee where name like '%張%'
    select * from warehouse where warehouseNo in (select warehouse from employee where name like '%張%')
end

go
execute pro_sql3

  

3.帶有輸入引數的儲存過程

  找出三個數字中最大的數

create proc proc_sql4

@num1 int,

@num2 int,

@num3 int

as 

begin

  declare @max int 

  if @num1>@num2

    set @max = @num1
  else

    set @max = @num2

  

  if @num3 > @max

    set @max = @num3
  print '3個數的中最大的數字是:'  +  cast (@max as varchar (20) )

end



execute proc_sql4  3 , 4 ,5

  

4.求階乘之和

alter proc proc_sql5
    @dataSource int 
as 
begin 
    declare @sum int ,@temp int, @tempSum int
    set @sum = 0
    set @temp = 1
    set @tempSum = 1
    while @temp <= @dataSource
         begin 
            set @tempSum = @tempSum * @temp
            set @sum = @sum + @tempSum
            set @temp = @temp +1
        end
       print cast ( @dataSource as varchar(50) ) + '的階乘之和為:' + cast (@sum as varchar(50))
end


execute proc_sql5  5

  

5.帶有輸入引數的資料查詢功能的儲存過程

create proc proc_sql6
    @minSalary int,
    @maxSalary int
as
begin 
    select * from empolyee where salary > @minSalary and salary< @maxSalary
end


execute proc_sql6 8000,10000

  

6. 帶有條件判斷的插入功能的儲存過程

create proc proc_sql7
    @id varchar(30),
    @deptNo varchar(30),
    @name varchaer(50),
    @sex varchar(10),
    @salary int(10)
as 
begin 
    if Exists (select * from employee where id = @id)
        print ‘該員工號已經存在,請輸入正確的id’
     else
        begin     
            if(Exists (select * from dept where de))

  

7.儲存過程的自動執行

  使用sp_procoption系統儲存過程即可自動執行一個或者多個儲存過程,其語法格式如下:

  sp_procoption [@procName=] 'procedure', [@optionName=] 'option', [@optionValue=] 'value'

  

各個引數含義如下:

[@procName=] 'procedure': 即自動執行的儲存過程

[@optionName=] 'option':其值是startup,即自動執行儲存過程

[@optionValue=] 'value':表示自動執行是開(true)或是關(false)

sp_procoption @procName='masterproc', @optionName='startup', @optionValue='true'  

  利用sp_procoption系統函式設定儲存過程masterproc為自動執行

8. 監控儲存過程

可以使用sp_monitor可以檢視SQL Server伺服器的各項執行引數,其語法格式如下:

sp_monitor

該儲存過程的返回值是布林值,如果是0,表示成功,如果是1,表示失敗。該儲存過程的返回集的各項引數的含義如下:

*last_run: 上次執行時間

*current_run:本次執行的時間

*seconds: 自動執行儲存過程後所經過的時間

*cpu_busy:計算機CPU處理該儲存過程所使用的時間

*io_busy:在輸入和輸出操作上花費的時間

*idle:SQL Server已經空閒的時間

*packets_received:SQL Server讀取的輸入資料包數

*packets_sent:SQL Server寫入的輸出資料包數

*packets_error:SQL Server在寫入和讀取資料包時遇到的錯誤數

*total_read: SQL Server讀取的次數

*total_write: SQLServer寫入的次數

*total_errors: SQL Server在寫入和讀取時遇到的錯誤數

*connections:登入或嘗試登入SQL Server的次數

------------恢復內容結束------------