Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SQL Server 存储过程_mysql存储过程教程

SQL Server 存储过程_mysql存储过程教程

作者头像
全栈程序员站长
发布于 2022-11-14 03:34:01
发布于 2022-11-14 03:34:01
5.8K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

SQL SERVER 存储过程

**相对于视图的优势(为什么使用存储过程):** Sql Server中视图通过简单的Select查询来解决多次复杂的查询,但是视图不能提供业务逻辑的功能,而存储过程可以。 **什么是存储过程:**

  • 存储过程(Procedure)是一组为了完成特定功能的Sql语句集合,相当于C#中的方法,只编译一次,经编译后存储在数据库中,用户可以通过制定的存储过程名称并给出所需参数来执行
  • 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接收参数,输出参数,返回单个,多个结果集和返回值。
  • 正是由于存储过程只编译一次,所以它比单个Sql语句块要快速, 所以在一定程度上减少了网络流量,减轻网络负担。

存储过程的优点:

模块化编程

写一次存储过程,可以多次从应用程序的不同部分调用,重复使用

性能

存储过程提供更快的代码执行,减少了网络流量负担。

安全

用户无需使用写任何Sql语句去执行存储过程,防止了Sql注入攻击

可维护性

一组需求改变,修改存储过程即可再次重复调用

存储过程缺点:

不可移植性

每种数据库的内部编程语法都不太相同,当你的系统需要兼容多种数据库时最好不要用存储过程。

学习成本高,DBA一般都擅长写存储过程,但并不是每个程序员都能写好存储过程,除非你的团队有较多的开发人员熟悉写存储过程,否则后期系统维护会产生问题。

存储过程有复杂运算,或者复杂运算过多的话,会增加数据库运行的负担。

SQL SERVER写一个存储过程:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE PROC MyPage
(
@name nvarchar(10),
@page decimal output
)
AS
BEGIN
select * from students
END

执行存储过程:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare @p decimal--创建Sql变量
declare @n nvarchar(5)
set @n='张三'--为Sql变量赋值
EXEC MyPage @n,@p out--调用存储过程
select @p

修改(删除)存储过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alter proc proc_name
as
begin
  --sql语句
end  
--删除存储过程
drop proc proc_name

(相关实例)分页存储过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--存储过程分页
alter PROC NesList
(
@a int,--第几页
@b int,--每页行数
@sum int output,--总行数
@str int output,--总页数
@result nvarchar(100) output--结果
)
AS
BEGIN 
--总行数
Select @sum=count(*) from NewsListTable
--总页数
set @str=CEILING(@sum*1.0/@b)
if(@a<0 or @a>@str)
begin
set @result='页码错误!'
end
--分页数据
select t.NewsId as '新闻编号',t.NewsTitle as '新闻类别',t.NewsDate  as '新闻发布时间' from 
( SELECT  *,RN=ROW_NUMBER() OVER(order by NewsId) FROM NewsListTable) as t where t.RN between ((@a-1)*@b)+1 and @a*@b --between and 包括两边值
END
-------测试存储过程
--测试
declare @nub int
set @nub=-1
declare @nm int
set @nm=2
declare @countsum int
declare @countye int
declare @re nvarchar(100)
exec NesList @nub,@nm,@countsum out,@countye out,@re out
select @countsum,@countye,@re
  • VS调用存储过程实现分页:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 private int a = 1;//第几页
private int b = 7;//每页数据行数
private int sum;//总数据行数
private int str;//总页数
//利用SqlDataAdapter进行数据读取绑定
string connstr = "*****************";
DataTable u = new DataTable();
using (SqlDataAdapter con = new SqlDataAdapter("USP_Students", connstr))
{ 

con.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlParameter[] pms = { 

new SqlParameter ("@A",SqlDbType.Int) { 
Value=a },
new SqlParameter ("@B",SqlDbType.Int) { 
 Value=b},
new SqlParameter ("@SUM",SqlDbType.Int) { 
 Direction=ParameterDirection.Output},
new SqlParameter ("STR",SqlDbType.Int) { 
 Direction=ParameterDirection.Output}
};
con.SelectCommand.Parameters.AddRange(pms);
con.Fill(u);
lblsum.Text = pms[2].Value.ToString();//获取输出参数
lblye.Text = pms[3].Value.ToString();
label1.Text = a.ToString();
this.DGVI.DataSource = u;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/185587.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月5日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
消息队列中:消息可靠性、重复消息、消息积压、利用消息实现分布式事务
可以利用消息队列的有序性来验证是否有消息丢失。在Producer端给每个发出的消息附加一个连续递增的序号,然后在Consumer端来检查这个序号的连续性。如果没有消息丢失,Consumer收到消息的序号必然是连续递增的,如果检测到序号不连续,那就是丢消息了。还可以通过缺失的序号来确定丢失的是哪条消息,方便进一步排查原因
搜云库技术团队
2019/11/21
2.2K0
消息队列中:消息可靠性、重复消息、消息积压、利用消息实现分布式事务
主流消息队列选型技术比较
在使用消息队列的过程中,你会遇到很多问题,比如选择哪款消息队列更适合你的业务系统?如何保证系统的高可靠、高可用和高性能?如何保证消息不重复、不丢失?如何做到水平扩展?诸如此类的问题,每一个问题想要解决好,都不太容易。
微观技术
2020/08/20
3.8K0
回答面试官:如何保证消息不丢失
对于这个技术点不知道大家掌握的如何了,消息队列现在应该是公司必备的技能之一了,无论是RabbitMQ还是rocketmq,或者支持大数量的kafka
Java宝典
2021/11/09
5660
回答面试官:如何保证消息不丢失
消息队列面试解析系列(四)- 消息可靠性投递的实现原理
因此主流MQ其实都提供了可靠性投递机制,确保即使网络异常,消息也能可靠传递,而不会丢失。
JavaEdge
2021/02/22
8160
消息队列面试解析系列(四)- 消息可靠性投递的实现原理
MQ的作用及如何解决消息队列的丢失、重复和积压问题
引入 MQ 消息中间件最直接的目的是:做系统解耦合流量控制,追其根源还是为了解决互联网系统的高可用和高性能问题。
NeilNiu
2023/03/06
1K0
面试官:MQ 消息丢失、重复、积压问题,如何解决?
MQ是面试中比较高频的问题,面试官在面试候选人时,如果发现候选人的简历中写了在项目中使用了 MQ 技术(如 Kafka、RabbitMQ、RocketMQ)。通常面试官会给他抛出一个问题:
田维常
2022/11/25
8360
面试官:MQ 消息丢失、重复、积压问题,如何解决?
MQ消息丢了怎么破?在线等.....
在我们从事技术的工作中,离不开中间件,mq就是常见的中间件之一,丢消息可能是我们经常遇到的,为啥会丢?丢了怎么破?测试能不能复现,很多同学知道一些似是而非的策略,或者后续通过日志或者数据库手段去排查,甚至日志也难以发现......
周辰晨
2020/01/20
1.2K0
MQ消息丢了怎么破?在线等.....
消息队列之Kafka-生产者
KafkaProducer 是线程安全的,可以在多个线程中共享单个 KafkaProducer 实例,也可以将 KafkaProducer 实例进行池化来供其他线程调用。
conanma
2022/04/08
5070
一文读懂消息队列的一些设计
消息队列一般都有一个nameserver服务,用来检测broker是否存活,或者处理能力上是否存在延迟。这样在发送消息时就可以规避将消息发送到宕机的broker上,也避免因为网络等原因消息处理失败。
春哥大魔王
2019/05/14
4630
一文读懂消息队列的一些设计
阿里二面:要保证消息不丢失,又不重复,消息队列怎么选型?
在使用消息队列时,有两个经常让我们烦恼的问题,消息丢失和消息重复。那我们在做技术选型时,有没有一个消息队列能解决消息丢失和消息重复这两个问题呢?
jinjunzhu
2024/01/22
3060
阿里二面:要保证消息不丢失,又不重复,消息队列怎么选型?
消息队列学习 | 基础
异步处理也可以理解为并发处理,即多个任务同时进行,不需要等待,与之相对的是串行处理,需要一步一步等待执行
素履coder
2022/02/17
7700
消息队列学习 | 基础
面试官再问我如何保证 RocketMQ 不丢失消息,这回我笑了!
最近看了 @JavaGuide 发布的一篇『面试官问我如何保证Kafka不丢失消息?我哭了!』,这篇文章承接这个主题,来聊聊如何保证 RocketMQ 不丢失消息。 0x00. 消息的发送流程 一条消
andyxh
2020/03/26
2K0
被面试官问到消息队列的丢失、重复与积压问题该如何回答
文章来源:blog.csdn.net/gu131007416553/article/details/120934738
三友的java日记
2022/08/10
5800
被面试官问到消息队列的丢失、重复与积压问题该如何回答
消息队列消息丢失和消息重复发送的处理策略
来源:https://www.jianshu.com/p/533fc6fc0963 分布式事务 什么是分布式事务 我们的服务器从单机发展到拥有多台机器的分布式系统,各个系统之前需要借助于网络进行通信,原有单机中相对可靠的方法调用以及进程间通信方式已经没有办法使用,同时网络环境也是不稳定的,造成了我们多个机器之间的数据同步问题,这就是典型的分布式事务问题。 在分布式事务中事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。分布式事务就是要保证不同节点之间的数据一致性
程序猿DD
2022/07/04
2K0
消息队列消息丢失和消息重复发送的处理策略
Kafka入门教程其一 消息队列基本概念 及常用Producer Consumer配置详解学习笔记
Apache Kafka是基于发布/订阅的容错消息系统,由Scala和Java编写,是一个分布式消息队列,具有高性能、持久化、多副本备份、横向扩展能力。
大鹅
2021/06/16
1.1K0
被怼了:acks=all消息也会丢失?
消息队列是面试中一定会被问到的技术模块,虽然它在面试题占比不及并发编程和数据库,但也属于面试中的关键性问题。所以今天我们就来看一道,MQ 中高频,但可能会打破你以往认知的一道面试题。
磊哥
2024/08/06
1740
大数据开发:消息队列如何处理消息积压
实时消息流处理,是当前大数据计算领域面临的常见场景需求之一,而消息队列对实时消息流的处理,常常会遇到的问题之一,就是消息积压。今天的大数据开发学习分享,我们就来聊聊,消息队列如何处理消息积压?
成都加米谷大数据
2021/07/08
2.4K0
大数据开发:消息队列如何处理消息积压
消息队列探秘-RabbitMQ消息队列介绍
RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。
高广超
2018/12/12
3.3K0
【MQ我可以讲一个小时】
引入消息中间件也会带来很多问题,先说说消息丢失,生产者往消息队列发送消息,消息队列往消费者发送消息,会有丢消息的可能,消息队列也有可能丢消息,通常MQ存盘时都会先写入操作系统的缓存页中,然后再由操作系统异步的将消息写入硬盘,这个中间有个时间差,就可能会造成消息丢失,如果服务挂了,缓存中还没有来得及写入硬盘的消息就会发生消息丢失。不同的消息中间件对于消息丢失也有不同的解决方案,先说说最容易丢失消息的kafka吧。生产者发消息给Kafka Broker:消息写入Leader后,Follower是主动与Leader进行同步,然后发ack告诉生产者收到消息了,这个过程kafka提供了一个参数,request.required.acks属性来确认消息的生产,0表示不进行消息接收是否成功的确认,发生网络抖动消息丢了,生产者不校验ACK自然就不知道丢了。1表示当Leader接收成功时确认,只要Leader存活就可以保证不丢失,保证了吞吐量,但是如果leader挂了,恰好选了一个没有ACK的follower,那也丢了。-1或者all表示Leader和Follower都接收成功时确认,可以最大限度保证消息不丢失,但是吞吐量低,降低了kafka的性能。一般在不涉及金额的情况下,均衡考虑可以使用1,保证消息的发送和性能的一个平衡。Kafka Broker 消息同步和持久化:Kafka通过多分区多副本机制,可以最大限度保证数据不会丢失,如果数据已经写入系统缓存中,但是还没来得及刷入磁盘,这个时候机器宕机,或者没电了,那就丢消息了,当然这种情况很极端。Kafka Broker 将消息传递给消费者:如果消费这边配置的是自动提交,万一消费到数据还没处理完,就自动提交offset了,但是此时消费者直接宕机了,未处理完的数据丢失了,下次也消费不到了。所以为了避免这种情况,需要将配置改为,先消费处理数据,然后手动提交,这样消息处理失败,也不会提交成功,没有丢消息。
Java廖志伟
2022/03/07
4880
【MQ我可以讲一个小时】
2021-Java后端工程师面试指南-(消息队列)
面试指南系列,很多情况下不会去深挖细节,是小六六以被面试者的角色去回顾知识的一种方式,所以我默认大部分的东西,作为面试官的你,肯定是懂的。
用户9927510
2022/07/29
3690
2021-Java后端工程师面试指南-(消息队列)
推荐阅读
相关推荐
消息队列中:消息可靠性、重复消息、消息积压、利用消息实现分布式事务
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验