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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
存储过程详解
存储过程简介 什么是存储过程:存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。 存储过程的好处: 1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。 2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。 3.通过存储过程能够使没
郑小超.
2018/01/24
2.2K0
曾今的代码系列——自己的分页控件+存储过程实现分页
项目里面的测试代码,仅供参考 LoginByAjax <title>Ajax登陆</title> <script src="Scripts/common.js" type="text/javascript"></script> <script type="text/javascript"> var xhr; window.onload = function () { xhr = new createXmlHttp();
用户1161731
2018/01/11
7500
曾今的代码系列——自己的分页控件+存储过程实现分页
ASP.NET 存储过程操作
存储过程是存放在数据库服务器上的预先编译好的sql语句。使用存储过程,可以直接在数据库中存储并运行功能强大的任务。存储过程在第一应用程序执行时进行语法检查和编译,编译好的版本保存在高速缓存中。在执行重复任务时,存储过程可以提高性能和一致性。由于存储过程可以将一系列对数据库的操作放在数据库服务器上执行,因而可以降低Web服务器的负载,提高整个系统的性能。
跟着阿笨一起玩NET
2018/09/19
1.2K0
关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现
BindingNavigator: 就是DataGridView控件上面的那个,在工程里名字: bindngrDemo
全栈程序员站长
2022/09/14
5010
关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现
在创建带输出参数和返回值的存储过程时---犯下的一个低级错误
异常处理汇总-数据库系列 http://www.cnblogs.com/dunitian/p/4522990.html 后期会在博客首发更新:http://dnt.dkill.net/Article
逸鹏
2018/04/10
1.6K0
在创建带输出参数和返回值的存储过程时---犯下的一个低级错误
Asp.net中DataGrid控件的自定义分页
使用实现起来虽然比较方便,但是效率不高,每次都需要读取所有页(整个记录集),而加载的只是其中一页,造成了资源的浪费,记录多又会使效率变得很低。下面通过DataGrid的自定义分页功能来减少资源使用和提
Java架构师必看
2020/10/23
1.2K0
MSSQL之十一 数据库高级编程总结
2.1)使用复数,Pascal Case,而复数只加在最后一个单词上如:Products,Users,UserRoles
张哥编程
2024/12/17
3720
C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息
C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度。不然获取到的结果总是只有第一字符。本人就是由于这个原因,折腾了很久。在此记录一下,供大家以后参考! 例如: CREATE PROCEDURE sp_AccountRole_Create @CategoryID int, @RoleName nvarchar(10), @Description nvarchar(50), @RoleID int output AS DECLARE @Count int -- 查找是否有相同
欢醉
2018/01/22
3.5K0
StoredProcedure「建议收藏」
这个玩意称为存储过程,类似于其他编程语言中的函数,它含有可与IF,WHILE等这样的编程构造所结合的SQL语句,以编译的形式保存在数据库中。存储过程可用来编写数据库中处理事务的代码。
全栈程序员站长
2022/09/18
3880
整理sqlserver 级联更新和删除 c#调用存储过程返回值
整理一下级联更新和删除 c#调用返回值 use master go IF exists(select 1 from sysdatabases where name='temp') BEGIN DROP DATABASE temp END create database temp go use temp go --drop table ProductInfo create table ProductInfo ( ProductId int primary key , ProductName
lpxxn
2018/01/31
1.1K0
C#二十六 使用Ado.Net调用存储过程
存储过程是连接式访问数据库的一种延伸,主要是通过命令对象调用数据库系统中的存储过程来完成的。存储过程可以带参数,也可以不带参数,可以返回结果页可以没有返回结果。存储过程执行速度快、允许模块化程序设计并且提高系统安全性,所以是最常用的操作数据库的技术。使用Ado.Net中的SqlCommand可以调用并执行 Sql Server数据库的存储过程。
张哥编程
2024/12/13
1730
我的数据访问函数库的源代码(四)—— 存储过程部分,包括存储过程的参数的封装
/* 2008 4 25 更新 */ 我的数据访问函数库的源码。整个类有1400行,原先就是分开来写的,现在更新后还是分开来发一下吧。 第四部分:存储过程部分,包括存储过程的参数 ,主要是对存储过程的参数的封装。 //存储过程的参数部分         #region 存储过程的参数部分——清除和添加参数         #region 清除参数         /// <summary>         /// 清除SqlCommand的存储过程的参数。         /// </su
用户1174620
2018/02/07
1.1K0
SQL Server 存储过程的分页方案比拼
CREATE TABLE [TestTable] (  [ID] [int] IDENTITY (1, 1) NOT NULL ,  [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,  [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,  [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,  [Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL  ) ON [PRIMARY] GO
Java架构师必看
2021/03/22
9220
在.NET中调用存储过程
因为做项目要用到数据库,因此存储过程是必不可少的,看了一点如何在.NET中调用存储过程的资料,颇有点心得,觉得这个东西是当用到数据库的时候必须要会的一项技术。下面是它的定义:
SAP梦心
2022/05/07
2.7K0
SQLSERVER存储过程语法详解
@parameter 过程中的参数。在 Create PROCEDURE 语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。
全栈程序员站长
2022/09/13
1.8K0
【自然框架】数据访问之精雕细琢(一)存储过程的参数
目标:   对存储过程的参数进行封装,达到方便操作、更换数据库不需要改代码的目的。 特点: 1、 调用方便 2、 没有数据库特征。 正文:   现在参数化SQL语句越来越常用了,这就涉及到如何写存储过程的参数的问题。您也许会问,这有啥的直接写不就可以了么?就像下面这段代码。 string sql = "insert into OS_User_Info values(@UserID,@PersonID,@NikeName,@ProvinceID,@CityID,@CountyID,@Introduction
用户1174620
2018/02/08
7440
MySQL存储过程了解一下
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
布禾
2021/04/09
1.4K0
Sql server之sql注入
关于sql注入的危害在这里就不多做介绍了,相信大家也知道其中的厉害关系。这里有一些sql注入的事件大家感兴趣可以看一下
Power7089
2020/11/09
5.8K0
数据库之ADO.NET基础知识整理
       之前我们所学只能在查询分析器里查看数据,操作数据,我们不能让普通用户去学sql,所以我们搭建一个界面(Web Winform)让用户方便的操作数据库中的数据
洋仔聊编程
2019/01/15
2K0
IDataParameter调用存储过程
public string GenerateExamePaper(string paperType, string driverID, string MacAddr) { int i; IDataParameter[] iData = new SqlParameter[4]; iData[0] = new SqlParameter(“@paperType”, paperType); iData[1] = new SqlParameter(“@driverID”, driverID); iData[2] = new SqlParameter(“@MacAddr”, MacAddr); iData[3] = new SqlParameter(“@sReturn”, SqlDbType.Char, 50, ParameterDirection.Output, false, 0, 0, string.Empty, DataRowVersion.Default,null); string aaa = “”; i= DbHelperSQL.RunProcedureParOut(“Pro_GenerateExamePaper”, iData, out aaa).ToString();
全栈程序员站长
2022/07/13
1.9K0
相关推荐
存储过程详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验