存储过程学习笔记

存储过程就是一条或者多条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. JAVA进阶之路(一)

    初学的大三奋斗者,fighting!!! 下面是进阶之路 Java平台和语言最开始只是SUN公司在1990年12月开始研究的一个内部项目.SUN公司的一个叫做帕特里克·诺顿的工程师被自己开发的C和C语 ...

  2. dhcp服务器(一)

    DHCP服务概述: 名称:DHCP -Dynamic Host Configuration Protocol动态主机配置协议. 功能:DHCP(Dynamic Host Configuration P ...

  3. Go的基本类型与变量

    基本类型 布尔型:bool 长度:1字节 取值范围:true,false 注意:不可以用数字代表true或false 整型:int/uint 根据运行平台可能为32或64位 8位整型:int8/uin ...

  4. 简单实现Spring框架--注解版

    自己写的Spring框架——简单实现IoC容器功能 前几天在网上看了篇帖子,是用xml的方式实现spring的ioc容器,觉得挺有意思的,这边自己试着用注解的形式造了一套轮子. 工程结构 codein ...

  5. UVa 11988 Broken Keyboard(数组模拟链表)

    题目链接: https://cn.vjudge.net/problem/UVA-11988 /* 问题 将一段文本经过一定的规则处理后输出,规则就是[表示home键,表示光标跳到行首,]表示end键, ...

  6. Ant Trip(区别于二分匹配中最小路径覆盖的一笔画问题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3018 题目: Problem Description Ant Country consist of ...

  7. HTML 初识 HTML【 整体结构 文字 图片 表格 超链接】

    HTML        超文本标记语言,页面内可以包含图片.链接,甚至音乐.程序等非文字元素.       网页的本质就是超级文本标记语言,万维网是建立在超文本基础之上的.TML 通过标记符号来标记要 ...

  8. input点击链接另一个页面,各种操作。

    1.链接到某页<input type="button" name="Submit" value="确 定" class="b ...

  9. jquery判断输入框的字符串是否为空或者空格

    function checkKey(key) { if($.trim(key) == ''){ /** * 输入的字符串为空,空格 */ alert('请输入关键字'); return false; ...

  10. Sql Server 与 MySql 在使用 update inner join 时的区别

    Sql Server -- 不使用别名 UPDATE tb_User SET tb_User.pass = '' FROM tb_User usr INNER JOIN tb_Address addr ...