首页 > 数据库 >SQL SERVER 从入门到精通 第5版 第三篇 高级应用 第10章 存储过程 读书笔记

SQL SERVER 从入门到精通 第5版 第三篇 高级应用 第10章 存储过程 读书笔记

时间:2024-04-12 19:23:01浏览次数:19  
标签:语句 10 存储 读书笔记 -- BEGIN SERVER SQL 过程

第10章 存储过程

 

  >.存储过程概述

  存储过程(stored procedure)是预编译SQL语句的集合,这些语句存储在 一个名称下并作为一个单元来处理.存储过程取代了传统的逐条执行SQL语句的方式.一个存储过程中可以包含增删改查等一系列SQL语句,当这个存储过程被调用时,这些操作也会同时被执行.

  存储过程与其他编程语言中的过程类似,它可以接受输入参数并以输出参数的格式,它可以向调用过程或者批处理返回:

    1.多个值;包含用于在数据库中执行操作(包括调用 其他过程)的编程语句;

    2.状态值,以指明成功或者失败(以及失败的原因)

  >.存储过程的分类:

    >.系统存储过程:用来管理SQL SERVER和显示有关数据库与用户信息的存储过程;

    >.自定义存储过程: 用户在SQL SERVER中通过采用SQL语句创建的存储过程;

    >.扩展存储过程: 通过编程语言(例如C)创建外部全程,并将这个例程在SQL SERVER 中作为存储过程使用.

  >.存储过程的优点:

    >.存储过程可以嵌套使用,支持代码重用.

    >.存储过程可以接受与使用参数,动态执行其中的SQL语句.

    >.存储过程比一般的SQL语句执行速度愉.存储过程在创建时已经被编译,每次执行时不需要重新编译,而SQL语句每次执行时都需要编译.

    >.存储过程具有安全性和所有权链接,以及可以附加到它们的证书.用户可以被授予权限来执行存储过程而不必直接对存储过程中引用的对象具有权限.

    >.存储过程允许模块化程序设计.存储过程一旦创建,以后可以在程序中多次调用.

    >.存储过程可以减少网络通信流量.

    >.存储过程可以保证应用程序的安全性.

  >.创建存储过程:

    >.使用向导创建一个名为test的存储过程.

    

 

   在"查询"菜单中,选择 "指定模板参数的值",然后修改存储过程的名称(Procedure_name)与SQL语句

 

   >.使用Create PROC语句来创建存储过程    

    -- 此存储过程通过员工ID检索员工信息。
CREATE PROCEDURE [dbo].[GetEmployeeByID]     --GetEmployeeByID存储过程名称
    @EmployeeID INT    -- 参数(可以有多个),要检索的员工的ID。
AS
BEGIN    
    SET NOCOUNT ON;   --  用于防止额外的结果集干扰SELECT语句。

    -- 在此处插入存储过程的语句
    SELECT * 
    FROM Employees 
    WHERE EmployeeID = @EmployeeID;
END
GO

  >.管理存储过程

    用户可以在对应数据库的 [存储过程] 目录下查看所有存储过程

 

      >.执行存储过程

        存储过程可以通过EXECUTE或者它的缩写EXEC命令来执行,比如执行 test 存储过程可以写成:

EXEC test;
      >.查看存储过程

      有三种方法可以查看存储过程的定义:

        1.使用SYS.SQL_MODULES

        2.使用OBJECT_DEFINITION

        3.使用SP_HELPTEXT

SELECT * FROM sys.sql_modules;
SELECT OBJECT_DEFINITION(661577395) AS sql;
EXEC sp_helptext 'test';

 

 

      >.修改存储过程

        虽然删除后再重新创建存储过程可以达到修改存储过程的目的,但是重建会丢失与该存储过程相关联的所有权限.

        有两种方法可以实现对存储过程的修改,一种是通过菜单修改,一种是通过SQL语句修改.

        1.通过菜单修改.如下图

 

        2.使用ALTER PROCEDURE语句实现对存储过程的修改.
ALTER PROCEDURE [dbo].[test]
    -- 新的存储过程参数或注释可在这里添加
AS
BEGIN
    -- 存储过程的新逻辑可在这里添加
    -- 请注意,这里不需要重新声明已有的参数
END
GO
      >.重命名存储过程

        >.通过菜单重命名

         >.通过sp_rename  SQL语句重命名

EXEC sp_rename 'dbo.GetEmployeeByID', 'GetEmployeeByEmployeeID';

      >.删除存储过程

         >.通过菜单删除.略

        >.通过DROP PROCEDURE SQL语句删除  

DROP PROCEDURE [dbo].[GetEmployeeByEmployeeID];

小例:

 

CREATE PROCEDURE [dbo].[YourStoredProcedureName]
AS
BEGIN
    DECLARE @truc INT;
    SET @truc = 0; -- 设置默认值,可以根据需要更改

    BEGIN TRY
        BEGIN TRANSACTION;
        -- 这里是存储过程的逻辑
        -- 使用条件判断语句处理事务
        IF @truc = 2
        BEGIN
            ROLLBACK TRANSACTION;    --回滚
            -- 返回值为25
            SELECT 25 AS ReturnValue;    --返回一个值为25
        END
        ELSE IF @truc = 0
        BEGIN
            COMMIT TRANSACTION;     --提交事务
            -- 返回值为0
            SELECT 0 AS ReturnValue;   --返回一个值为0
        END
        ELSE
        BEGIN
            -- 处理其他情况
        END
    END TRY
    BEGIN CATCH
        -- 处理错误
        IF @@TRANCOUNT > 0
            ROLLBACK TRANSACTION;

        -- 抛出或记录错误信息
        THROW;
    END CATCH;
END

 

标签:语句,10,存储,读书笔记,--,BEGIN,SERVER,SQL,过程
From: https://www.cnblogs.com/yoooos/p/18128054

相关文章

  • 题解:P10320 勇气(Courage)
    P10320勇气(Courage)推导过程本题是一道数学题,重点是如何推导出正确式子。首先,先特判几个特殊点:当\(n>=2\)且\(x=2\)时,是不存在解的,战斗力无论何时都不会超过\(2^{n}\)。当\(x\)不强化就以大于\(2^{n}\)。当\(x\)第一次强化达到\(x^{2}\)时,大于\(2^{n}\)......
  • 实验2 C语言分支与循环基础应用编程 王刚202383310053
    1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#defineN55intmain()6{7intnumber,i;8srand(time(0));9for(i=0;i<N;i++)10{number=rand()%65+1;11printf("20238331%04d\n",number);12}13sy......
  • P10064 [SNOI2024] 公交线路
    显然只需要考虑叶子结点的连边情况,设一个结点\(u\)仅经过一条路径能到达的点的集合为\(S_x\),则条件等价于对于任意两个叶子结点\(x,y\),\(S_x\)与\(S_y\)有交.由树的性质,所有\(S_x\)的交集非空(否则存在环),于是交集为一个连通块,上点边容斥.于是问题转化为两部分:求所有\(......
  • 使用内置函数 (SQL Server) 验证、查询和更改 JSON 数据
    使用内置函数(SQLServer)验证、查询和更改JSON数据项目2023/09/0313个参与者反馈 本文内容此页上的示例JSON文本使用ISJSON函数验证JSON文本使用JSON_VALUE函数从JSON文本中提取值使用JSON_QUERY函数从JSON文本中提取对象或数组显示另外......
  • 分享10款实用的办公软件,个个都是效率神器,好用到爆!
    在这个信息化、数字化的时代,办公软件已经成为了我们日常工作中不可或缺的一部分。它们不仅可以帮助我们更高效地完成工作任务,还能提升我们的工作效率和团队协作能力。今天,我将为大家分享10款实用的办公软件,个个都是效率神器,好用到爆! 01、Everything Everything是一款极速文......
  • java中cron表达式 每10分钟执行一次
    在Java中,可以使用Quartz框架来定义和调度任务,包括使用Cron表达式来定义任务的执行时间。下面是一个使用Quartz框架实现每10分钟执行一次任务的示例:添加Quartz依赖在Maven项目中,添加以下依赖到pom.xml文件中:<dependency><groupId>org.quartz-scheduler</groupId><arti......
  • MURF1040CT-ASEMI快恢复二极管MURF1040CT
    编辑:llMURF1040CT-ASEMI快恢复二极管MURF1040CT型号:MURF1040CT品牌:ASEMI封装:TO-220F最大平均正向电流(IF):10A最大循环峰值反向电压(VRRM):400V最大正向电压(VF):1.30V工作温度:-55°C~150°C反向恢复时间:35ns芯片个数:2芯片尺寸:72mil引脚数量:3正向浪涌电流(IFMS):150A包装方式:50/......
  • Windows 10 专业工作站版:Win10中最强大的版本?
    Windows10提供了多个版本,满足不同用户的需求。其中,Windows10专业工作站版作为面向专业用户的旗舰版本,在性能、功能和安全方面都拥有显著优势,堪称Win10家族中最强大的版本。强悍的硬件支持Windows10专业工作站版支持更高的硬件配置,包括:最多支持4个CPU,而其他版本最多仅......
  • 使用 SQL SERVER PROFILER 监测死锁
    作为DBA,可能经常会遇到有同事或者客户反映经常发生死锁,影响了系统的使用。此时,你需要尽快侦测和处理这类问题。死锁是当两个或者以上的事务互相阻塞引起的。在这种情况下两个事务会无限期地等待对方释放资源以便操作。下面是死锁的示意图: 本文将使用SQLServerProfile......
  • ZCMU-1053
    比较简单记录一下主要感觉它这个题目没说清楚,题目要求:先有n,接着给出长度为n的标准组,然后给出猜测组,输出的两个数一个是有多少个是相对应的既相同坐标其数值也相同,后一个是两个都有但是位置不同(不含已经相同的)我觉得它少了一类个例子:类似于123436133343思路:用......