存儲過程

通常分爲十種狀況,每種語法各不相同:sql

 一、 建立語法緩存

1
2
3
4
5
6
7
create  proc |  procedure  pro_name
    [{@參數數據類型} [=默認值] [ output ],
     {@參數數據類型} [=默認值] [ output ],
     ....
    ]
as
    SQL_statements

二、 建立不帶參數存儲過程fetch

1
2
3
4
5
6
7
8
9
10
--建立存儲過程
if (exists ( select  from  sys.objects  where  name  'proc_get_student' ))
     drop  proc proc_get_student
go
create  proc proc_get_student
as
     select  from  student;
 
--調用、執行存儲過程
exec  proc_get_student;

三、 修改存儲過程加密

1
2
3
4
--修改存儲過程
alter  proc proc_get_student
as
select  from  student;

四、 帶參存儲過程spa

1
2
3
4
5
6
7
8
9
10
--帶參存儲過程
if (object_id( 'proc_find_stu' 'P' is  not  null )
     drop  proc proc_find_stu
go
create  proc proc_find_stu(@startId  int , @endId  int )
as
     select  from  student  where  id  between  @startId  and  @endId
go
 
exec  proc_find_stu 2, 4;

五、 帶通配符參數存儲過程code

1
2
3
4
5
6
7
8
9
10
11
--帶通配符參數存儲過程
if (object_id( 'proc_findStudentByName' 'P' is  not  null )
     drop  proc proc_findStudentByName
go
create  proc proc_findStudentByName(@ name  varchar (20) =  '%j%' , @nextName  varchar (20) =  '%' )
as
     select  from  student  where  name  like  @ name  and  name  like  @nextName;
go
 
exec  proc_findStudentByName;
exec  proc_findStudentByName  '%o%' 't%' ;

六、 帶輸出參數存儲過程ci

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if (object_id( 'proc_getStudentRecord' 'P' is  not  null )
     drop  proc proc_getStudentRecord
go
create  proc proc_getStudentRecord(
     @id  int --默認輸入參數
     @ name  varchar (20)  out --輸出參數
     @age  varchar (20)  output --輸入輸出參數
)
as
     select  @ name  name , @age = age   from  student  where  id = @id  and  sex = @age;
go
 
-- 
declare  @id  int ,
         @ name  varchar (20),
         @ temp  varchar (20);
set  @id = 7; 
set  @ temp  = 1;
exec  proc_getStudentRecord @id, @ name  out , @ temp  output ;
select  @ name , @ temp ;
print @ name  '#'  + @ temp ;

七、 不緩存存儲過程get

1
2
3
4
5
6
7
8
9
10
11
--WITH RECOMPILE 不緩存
if (object_id( 'proc_temp' 'P' is  not  null )
     drop  proc proc_temp
go
create  proc proc_temp
with  recompile
as
     select  from  student;
go
 
exec  proc_temp;

八、 加密存儲過程string

1
2
3
4
5
6
7
8
9
10
11
12
13
--加密WITH ENCRYPTION 
if (object_id( 'proc_temp_encryption' 'P' is  not  null )
     drop  proc proc_temp_encryption
go
create  proc proc_temp_encryption
with  encryption
as
     select  from  student;
go
 
exec  proc_temp_encryption;
exec  sp_helptext  'proc_temp' ;
exec  sp_helptext  'proc_temp_encryption' ;

九、 帶遊標參數存儲過程it

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if (object_id( 'proc_cursor' 'P' is  not  null )
     drop  proc proc_cursor
go
create  proc proc_cursor
     @cur  cursor  varying  output
as
     set  @cur =  cursor  forward_only  static  for
     select  id,  name , age  from  student;
     open  @cur;
go
--調用
declare  @exec_cur  cursor ;
declare  @id  int ,
         @ name  varchar (20),
         @age  int ;
exec  proc_cursor @cur = @exec_cur  output ; --調用存儲過程
fetch  next  from  @exec_cur  into  @id, @ name , @age;
while (@@fetch_status = 0)
begin
     fetch  next  from  @exec_cur  into  @id, @ name , @age;
     print  'id: '  convert ( varchar , @id) +  ', name: '  + @ name  ', age: '  convert ( char , @age);
end
close  @exec_cur;
deallocate  @exec_cur; --刪除遊標

十、 分頁存儲過程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
---存儲過程、row_number完成分頁
if (object_id( 'pro_page' 'P' is  not  null )
     drop  proc proc_cursor
go
create  proc pro_page
     @startIndex  int ,
     @endIndex  int
as
     select  count (*)  from  product
;    
     select  from  (
         select  row_number() over( order  by  pid)  as  rowId, *  from  product 
     temp
     where  temp .rowId  between  @startIndex  and  @endIndex
go
--drop proc pro_page
exec  pro_page 1, 4
--
--分頁存儲過程
if (object_id( 'pro_page' 'P' is  not  null )
     drop  proc pro_stu
go
create  procedure  pro_stu(
     @pageIndex  int ,
     @pageSize  int
)
as
     declare  @startRow  int , @endRow  int
     set  @startRow = (@pageIndex - 1) * @pageSize +1
     set  @endRow = @startRow + @pageSize -1
     select  from  (
         select  *, row_number() over ( order  by  id  asc as  number  from  student 
     ) t
     where  t.number  between  @startRow  and  @endRow;
 
exec  pro_stu 2, 2;
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息