存储过程学习笔记

存储过程就是一条或者多条sql语句的集合,为了实现特定任务,而将一些需要多次调用的固定操作语句编写成程序段,这些程序段存储在服务器上,有数据库服务器通过程序来调用。
T_SQL:存储过程是值保存的T_SQL语句集合,可以接受和返回用户提供的参数,存储过程也可能从数据库向客户端应用程序返回数据。
存储过程的优点就不多说了开始学习吧!

  创建表以及测试数据
use db_test
create table student(userid varchar(10),username varchar(20),identityd varchar(20),classId varchar(20))
insert into student values('20180312','小红','5131002121121212','6024201803'),
('20180313','小明','121354564654','6024201803'),
('20180314','小孙','6545487','6024201803'),
('20180315','小何','78921548','6024201803')
create table xfClass(classid varchar(10),classname varchar(20),rem varchar(20))
insert into xfClass values('6024201803','三班','学费比较高'),
('6024201802','二班','学费有点高')
select * from xfClass
create table test1(id varchar(10),name varchar(20),rem varchar(20)) --以前的测试表部分过程在这个表中完成
创建无参存储过程
--查看存储过程p_InsT1是否存在
if (exists (select * from sys.objects where name = 'p_InsT1'))
    drop proc p_InsT1
go  
--上面这句判断比较占用空间,所以后面创建存储过程我就不写了这句判断了
--创建一个存储过程p_InsT1
create proc p_seluser
as
select * from student a left join xfclass b on a.classId=b.classid ;
go
--执行sp_name存储过程
exec p_seluser

创建带参数的存储过程

create proc p_seluser_name(
@sName  varchar(20)
)
as
select * from student a left join xfclass b on a.classId=b.classid where username=@sName; --这段sql 应该可以优化,以后进行详细了解后在分享
go
--执行sp_name存储过程
exec p_seluser_name '小红'

存储过程的修改

方法1:直接修改,直接将新的过程将以前的过程进行覆盖。

alert proc p_insT1
as
select * from test1

方法2:找到存储过程文件进行修改

在数据库下可编程性中存储过程里找到需要修改的存储过程

修改之后运行一下该过程,修改完成。

  上面用的都是常用存储过程,下面了是不常用存储过程

不缓存存储过程
create proc p_temp
with recompile --设置为不缓存
as
select * from student;
加密存储过程
create proc proc_temp_encryption
with encryption
as
select * from student;
go
 
exec proc_temp_encryption;
exec sp_helptext p_set7; --未加密可直接查看源语句
exec sp_helptext proc_temp_encryption  --加密后不可以直接查看源语句
  带通配符参数存储过程
create proc p_findStNa(@id varchar(20)='%p%')
as
delete table test1 where id like @id
exec proc_p_findStNa //如果不加参数则直接使用定义的参数‘%p%’
exec proc_p_findStNa 'pp'; //如果不加参数则直接使用定义的参数
  带输出参数存储过程
查询出来的结果不以表格进行输出declare @id varchar(20),@name varchar(20),@rem varchar(20)  
set @id='2'
select @id=id,@name =name,@rem=rem from test1 where id=@id
--select @id, @name,@rem;
print @id+''+ @name+''+@rem;
通过函数对参数进行赋值
create proc p_getName(
@id varchar(20),--默认输入参数
@name varchar(20) out, --输出参数
@age varchar(20) output --输入输出参数
)
as
select @name = name ,@age =age from test1 where id=@id and sex=@age;
 
--运行
declare @id varchar(20),
@name varchar(20),
@temp varchar(20);
set @id='7';
set @temp='15';
--运行存储过程
exec p_getName @id,@name out,@tem output;
--直接输出存储过程中的返回值
select @name,@temp;
  上面的两段语句存在很大问题,他们的输出只有最后一条数据,因为在给变量赋值的时候只赋一次,当查询结果出来后数据指针往往指向最后一条,所以只输出最后一条。如要全部输出则  需要用到游标
9、带游标参数存储过程
if (object_id('proc_cursor', 'P') is not null)
drop proc proc_cursor
go
create proc proc_cursor --声明一个存储过程
@cur cursor varying output --声明游标变量forward_only变量为@cur
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;--删除游标

游标参考文档https://www.cnblogs.com/myboke/p/3738912.html

还有一些其他的存储过程,只不过大多数都是在上面这些基础上进行编写,所以就不多写了。

sql server 存储过程的学习的更多相关文章

  1. mysql与sql server参照对比学习mysql

    mysql与sql server参照对比学习mysql 关键词:mysql语法.mysql基础 转自桦仔系列:http://www.cnblogs.com/lyhabc/p/3691555.html ...

  2. SQL Server存储过程中使用表值作为输入参数示例

    这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...

  3. SQL Server存储过程Return、output参数及使用技巧

    SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...

  4. SQL Server 存储过程(转载)

    SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...

  5. 14、SQL Server 存储过程

    SQL Server 存储过程 存储过程类似函数,可以重复使用.相对于函数,存储过程拥有更强大的功能和更高的灵活性. 存储过程中可以包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个值或 ...

  6. (摘录)SQL Server 存储过程

    文章摘录:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html SQL Server 存储过程 Transact-SQL中的存储过程 ...

  7. Sql Server 存储过程中查询数据无法使用 Union(All)

    原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...

  8. Yii2.0调用sql server存储过程并获取返回值

    1.首先展示创建sql server存储过程的语句,创建一个简单的存储过程,测试用. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE P ...

  9. C# 调用存储过程 Sql Server存储过程 存储过程报错,程序中的try

    C#程序调用Sql Server存储过程,存储过程中报错情况,返回值... 0.SQL存储过程 USE [Opos] GO /****** Object: StoredProcedure [dbo]. ...

随机推荐

  1. 自制“低奢内”CSS3登入表单,包含JS验证,请别嫌弃哦。

    要求 必备知识 基本了解CSS语法,初步了解CSS3语法知识.和JS/JQuery基本语法. 开发环境 Adobe Dreamweaver CS6 演示地址 演示地址 预览截图(抬抬你的鼠标就可以看到 ...

  2. java学习--高效的除模取余运算(n-1)&hash

    没有测试过使用取余运算符和位运算符都做同一件事时的时间效率! 取余运算符% 如3除以2取余数 a = a%; 结果为1 上面是传统的方式进行求余运算. 需要先将10进制转成2进制到内存中进行计算,然后 ...

  3. mysql常用优化参数

    修改全站搜索 修改my.ini(my.cnf) ,在 [mysqld] 后面加入一行“ft_min_word_len=1”,然后 重启Mysql,再登录网站后台(模块管理->全站搜索)重建全文索 ...

  4. PTA (Advanced Level) 1006 Sign In and Sign Out

    Sign In and Sign Out At the beginning of every day, the first person who signs in the computer room ...

  5. java web 机试

    经过近一个月的学习,我们的java web已经学习完了. 这是我们这次的机试题. 一:题目 请利用MVC设计模式,并使用JSP.Servlet.JSTL和JQuery等技术实现动态条件的分页显示查询. ...

  6. picker(级联)组件及组件封装经验

    组件封装的几个经验 a.参数:最佳方式,仅一个object参数,所需要的实际参数,作为对象属性传入. 如此,便于数据的处理和扩展.例如,后期扩展需要增加参数,或者调整参数时,如果使用的对象传入,老的调 ...

  7. React 基础实例教程

    园子都荒废两个月了,实在是懒呀.. 近段时间用React开发了几个页面,在使用过程中着实碰到了一些问题,估计刚开始学习的伙伴们都会遇到各种各样的坑 总结记录一下,只看文档是碰不上问题的,内容基础也不基 ...

  8. 自制基于HMM的python中文分词器

    不像英文那样单词之间有空格作为天然的分界线, 中文词语之间没有明显界限.必须采用一些方法将中文语句划分为单词序列才能进一步处理, 这一划分步骤即是所谓的中文分词. 主流中文分词方法包括基于规则的分词, ...

  9. C# 函数 递归

    函数:独立完成某项功能的一个个体,有固定功能函数有 高度抽象函数. 作用: 提高代码的重用性 提高功能开发的效率 提高程序代码的可维护性 函数四要素:   输入       输出       函数名  ...

  10. <!--[if IE]><script type="text/javascript" src="matrix/js/html5.js"></script><![endif]-->代码解释

    块注释例子 1. <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]-->2. <!--[if IE]> 所有的I ...