首页 > 其他分享 >存储过程(Stored Procedure)

存储过程(Stored Procedure)

时间:2022-12-19 14:04:39浏览次数:39  
标签:存储 Data System Stored SQL 过程 DataTable Procedure


存储过程(Stored Procedure)

  • ​​存储过程定义​​
  • ​​存储过程如何使用​​
  • ​​在SQL Server中创建存储过程​​
  • ​​调用存储过程​​
  • ​​删除存储过程​​
  • ​​C#中调用存储过程​​
  • ​​为什么使用存储过程​​

存储过程定义

摘自百度百科

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。

可以简单理解为存储过程是封装好的一个完成特定功能函数,通过使用存储过程名来执行这个函数。

存储过程如何使用

在SQL Server中创建存储过程

找到数据库-表-可编译性-存储过程-右击新建存储过程。

create proc sp_name
@[参数名] [类型],@[参数名] [类型]
as
begin
.........
end

实例:

CREATE PROCEDURE news_update --存储过程名
--使用到的参数,
@id int,
@title varchar(100),
@content text,
@caid int
AS
BEGIN
--SQL语句
UPDATE news
SET title = @title, [content] = @content, caId = @caid
where id = @id


END
GO

调用存储过程

存储过程可以在三种环境下被调用:
command命令下,基本语法为:exec sp_name [参数名];
实例:

exec news_update @id=6,@title=abc,@content=def,@caid=13

存储过程(Stored Procedure)_database

SQL环境下,基本语法为:call sp_name [参数名];
PL/SQL环境下,基本语法为:begin sp_name [参数名] end;

删除存储过程

drop procedure sp_name

C#中调用存储过程

DAL层代码

SQLHelper类
/// <summary>
/// 指向带参数的SQL语句或存储过程
/// </summary>
/// <param name="cmdText">QL语句或存储过程</param>
/// <param name="paras">参数集合</param>
/// <param name="ct">命令类型</param>
/// <returns></returns>
public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
{
//初始化 System.Data.DataTable 类的新实例。
DataTable dt = new DataTable();

//使用查询的文本和 System.Data.SqlClient.SqlConnection 初始化 System.Data.SqlClient.SqlCommand
//类的新实例
cmd = new SqlCommand(cmdText, GetConn());

cmd.CommandType = ct;
//在Parameters末尾添加值数组
cmd.Parameters.AddRange(paras);

//using执行完时释放()中的内容,相应的数据库连接也会关闭
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
//通过所提供的 System.Data.IDataReader,用某个数据源的值填充 System.Data.DataTable。 如果 System.Data.DataTable
// 已经包含行,则从数据源传入的数据与现有行合并。
dt.Load(sdr);
}



//返回查询结果
return dt;

}
News类
/// <summary>
/// 取出最新10条新闻(所属分类、新闻标题、发布时间)
/// </summary>
/// <returns></returns>
public DataTable SelectNewNews()
{
//procNews_SelectNewNews为存储过程名
return sqlhelper.ExecuteQuery("procNews_SelectNewNews", CommandType.StoredProcedure);
}

为什么使用存储过程

存储过程只在创造时进行编译,以后每次执行存储过程都不需重新编译;而一般SQL语句每执行一次就需要编译一次,所以使用存储过程可提高数据库执行速度;

当对数据库进行复杂操作时(如对多个表进行增删改查),可将这些复杂操作通过存储过程封装起来,避免程序中sql语句过长。


标签:存储,Data,System,Stored,SQL,过程,DataTable,Procedure
From: https://blog.51cto.com/u_15916106/5952251

相关文章

  • 一些有用的SQL Server语句和存储过程
    --======================================================23--列出SQLSERVER所有表,字段名,主键,类型,长度,小数位数等信息45--在查询分析器里运......
  • SQL Server 存储过程的分页方案比拼
    SQLServer存储过程的分页,这个问题已经讨论过几年了,很多朋友在问我,所以在此发表一下我的观点2建立表:34CREATETABLE[TestTable](5[ID][......
  • 存储
    存储过程和函数:类似Java中的函数好处:1、提高代码的重用性2、简化操作3.减少了编辑次数并减少了和数据库服务器的连接次数,提高了效率含义:一组预先编译好的sql语句#创......
  • PC版QQ更改存储位置和重装系统后的导入数据
    这玩意设计的有点弱智1不登录不让改文件夹位置2登录就会先在用户文档(windowsxp叫我的文档)里面创建数据目录。3导入以前数据的选项藏的特别深更改位置在设置里面很容......
  • 深入解读MySQL InnoDB存储引擎Update语句执行过程
    参考b站up戌米的论文笔记https://www.bilibili.com/video/BV1Tv4y1o7tA/书籍《mysql是怎样运行的》极客时间《mysql实战45讲》系列文章目录和关于我一丶Mysql整体架......
  • EL-获取域中存储的值-对象值、EL-获取域中存储的值-List集合&Map集合值
    EL-获取域中存储的值-对象值1.对象:${域名称.键名.属性名}本质上会去调用对象的getter方法User类packagecom.example.day_17_eljstl.domain;importja......
  • docker高级篇2-分布式存储之三种算法
    面试题:1~2亿条数据需要缓存,请问如何设计这个缓存案例?答:单机单台100%是不可能的。肯定是分布式缓存的。那么用Redis如何落地?一般有三种方案:哈希取余分区;一致性哈希算法分区;哈......
  • EL运算符、EL获取域中存储的值
    EL运算符运算符: 1.算数运算符:+-*/(div)%(mod) 2.比较运算符:><>=<===!= 3.逻辑运算符:&&(and)||(or)!(not) 4.空运算符:empt......
  • docker高级篇2-分布式存储之三种算法
    面试题:1~2亿条数据需要缓存,请问如何设计这个缓存案例?答:单机单台100%是不可能的。肯定是分布式缓存的。那么用Redis如何落地?一般有三种方案:哈希取余分区;一致性哈希算法......
  • SQL(及存储过程)跑得太慢怎么办?
      SQL作为目前最常用的数据处理语言,广泛应用于查询、跑批等场景。当数据量较大时,使用SQL(以及存储过程)经常会发生跑得很慢的情况,这就要去优化SQL。优化SQL有一些特定的套路......