关闭

SQL Server基础:存储过程

发表于:2015-5-08 10:05

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:阿赫瓦里    来源:51Testing软件测试网采编

  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' 的文本已加密。"
32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号