--查詢所有存儲過程 select * from sys.objects where type = 'P'; select * from sys.objects where type_desc like '%pro%' and name like 'sp%';
Ø 用戶自定義存儲過程
1、 創(chuàng)建語法
create proc | procedure pro_name
[{@參數(shù)數(shù)據(jù)類型} [=默認值] [output],
{@參數(shù)數(shù)據(jù)類型} [=默認值] [output],
....
] as SQL_statements
2、 創(chuàng)建不帶參數(shù)存儲過程
--創(chuàng)建存儲過程 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;
--調用、執(zhí)行存儲過程 exec proc_get_student;
3、 修改存儲過程
--修改存儲過程 alter proc proc_get_student as select * from student;
4、 帶參存儲過程
--帶參存儲過程 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;
5、 帶通配符參數(shù)存儲過程
--帶通配符參數(shù)存儲過程 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%';
6、 帶輸出參數(shù)存儲過程
if (object_id('proc_getStudentRecord', 'P') is not null) drop proc proc_getStudentRecord go create proc proc_getStudentRecord(
@id int, --默認輸入?yún)?shù)
@name varchar(20) out, --輸出參數(shù)
@age varchar(20) output--輸入輸出參數(shù)
) as select @name = name, @age = age from student where id = @id and sex = @age; go -- declare @id int,
--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;
8、 加密存儲過程
--加密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';
9、 帶游標參數(shù)存儲過程
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;--刪除游標
10、 分頁存儲過程
---存儲過程、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;