1.创建无参存储过程
--1.创建无参存储过程
if (exists (select * from sys.objects where name = 'getAllBooks'))
drop proc proc_get_student
go
create procedure getAllBooks
as
select * from books;
--调用,执行存储过程
exec getAllBooks;
2.修改存储过程
alter procedure dbo.getAllBooks
as
select book_auth from books;
3.删除存储过程
drop procedure getAllBooks;
4.重命名存储过程
sp_rename getAllBooks,proc_get_allBooks;
5.创建带参数的存储过程
存储过程的参数分为两种:输入参数和输出参数
输入参数:用于向存储过程传入值,类似java语言或则c中的值传递。
输出参数:用于调用存储过程后,参会结果,类似java语言的按引用传递。
值传递和引用传递区别:
基本数据类型赋值属于值传递;引用类型之间赋值属于引用传递。
值传递传递的是实实在在的变量值;引用传递传递的是对象的引用地址。
值传递后,两个变量改变的是各自的值;引用传递后,两个引用改变的是同一个对象的状态
(1)带一个参数存储过程
if (exists (select * from sys.objects where name = 'searchBooks'))
drop proc searchBooks
go
create proc searchBooks(@bookID int)
as
--要求book_id列与输入参数相等
select * from books where book_id=@bookID;
--执行searchBooks
exec searchBooks 1;
(2)带2个参数存储过程
if (exists (select * from sys.objects where name = 'searchBooks1'))
drop proc searchBooks1
go
create proc searchBooks1(
@bookID int,
@bookAuth varchar(20)
)
as
--要求book_id和book_Auth列与输入参数相等
select * from books where book_id=@bookID and book_auth=@bookAuth;
exec searchBooks1 1,'金庸';
(3)创建有返回值的存储过程
if (exists (select * from sys.objects where name = 'getBookId'))
drop proc getBookId
go
create proc getBookId(
@bookAuth varchar(20),--输入参数,无默认值
@bookId int output --输入/输出参数 无默认值
)
as
select @bookId=book_id from books where book_auth=@bookAuth
--执行getBookId这个带返回值的存储过程
declare @id int --声明一个变量用来接收执行存储过程后的返回值
exec getBookId '孔子',@id output
select @id as bookId;--as是给返回的列值起一个名字
(4)创建带通配符的存储过程
if (exists (select * from sys.objects where name = 'charBooks'))
drop proc charBooks
go
create proc charBooks(
@bookAuth varchar(20)='金%',
@bookName varchar(20)='%'
)
as
select * from books where book_auth like @bookAuth and book_name like @bookName;
--执行存储过程charBooks
exec charBooks '孔%','论%';
(5)加密存储过程
with encryption子句对用户隐藏存储过程的文本.下例创建加密过程,使用 sp_helptext 系统存储过程获取关于加密过程的信息,然后尝试直接从 syscomments 表中获取关于该过程的信息.
if (object_id('books_encryption', 'P') is not null)
drop proc books_encryption
go
create proc books_encryption
with encryption
as
select * from books;
--执行此过程books_encryption
exec books_encryption;
exec sp_helptext 'books_encryption';--控制台会显示"对象 'books_encryption' 的文本已加密。"