SQL server 创建存储过程

2023-09-22 12:40:08

SQL Server如何创建存储过程

  存储过程: 可以理解为完成特定功能的一组 SQL 语句集,存储在数据库中,经过第一次编译,之后的运行不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。

如何创建存储过程

  创建存储过程可以有两种方式:一是在 SSMS 中界面操作创建存储过程,而后修改其中的 SQL 语句及存储过程名称;二是通过命令行直接编写创建存储过程。
  在操作之前,得要有一个数据库和数据库中将要使用存储过程查询或操作的数据表,这里以 MyDBDemo 数据库为例,其中有一个 sys_user 的用户数据表。
在这里插入图片描述
  1、SSMS 界面创建存储过程:
  界面鼠标操作创建存储过程方便快捷,一些基础的脚本不需要手动编写,由 SSMS 自动生成。
  步骤: 展开数据库中的【可编程性】,在【存储过程】上鼠标单击右键出现弹出菜单,点击【存储过程】即可弹出新的查询窗口,里面有一些默认的 SQL 脚本。
在这里插入图片描述
  软件自动生成的存储过程创建脚本,现在可以基于此修改存储过程中的内容了。
在这里插入图片描述
  说明: 从 第 1 行到 20 行不需要关注,这些都是一些设置和注释说明,第 21 行到 33 行才是存储过程的主要内容。下面将通过代码逐行介绍这些命令。

CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> -- 这一行表示存储过程的名称, '<>' 是占位符,将其替换为存储过程的名称
	-- 以下列出存储过程的参数以及返回参数,这是设置存储过程有哪些参数和返回什么数据
	<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, 
	<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN -- 从这里开始就是存储过程的主体部分
	-- 这里面的内容就是 SQL 语句集,可以放置许多的 SQL 增删查改等操作脚本
END -- 这里结束存储过程,表示存储过程的 SQL 集在这里结束

  2、SQL 脚本创建存储过程:
  脚本创建存储过程就是自行编写基础的创建存储过程的语句,如上所示代码中的内容都是自行手动编写,然后执行脚本即可创建好这个存储过程。
  如下创建存储过程的脚本,是传入用户的数据参数,插入到数据库中,而后再查询出来展示,详细讲解请看注释,SQL 脚本如下所示:

CREATE PROCEDURE InsertUser -- 这里存储过程的名称为‘InsertUser’
	-- 输入参数有userno、pwd、username、role、email,输出参数有 count
	-- 输入输出参数的名称前面必须加上 ‘@’ ,表示其是一个变量。
	@userno nvarchar(50), --输入参数,用户编码
	@pwd nvarchar(50), -- 输入参数,登录密码
	@username nvarchar(50), -- 输入参数,用户姓名
	@email nvarchar(50), -- 输入参数,用户邮箱
	@count int output-- 输出参数,当前数据表中的总数据条数,这里输出参数采用 ‘output’ 标识
AS
BEGIN -- 从这里开始就是存储过程的主体部分
	-- 这里插入一条数据到数据表中,数据内容来源于存储过程中传入的内容,其中用户角色字段 ‘[role]’ 设置默认值为 ‘admin’
	INSERT INTO [dbo].[sys_user] ([userno],[pwd],[username],[role],[email])
     VALUES (@userno,@pwd,@username,'admin',@email);
	 -- 查询出数据表
	 select * from [dbo].[sys_user];
	 -- 返回值总条数查询
	 select @count = @@ROWCOUNT;
END -- 这里结束存储过程,表示存储过程的 SQL 集在这里结束

存储过程的使用或调用

  存储过程的使用需要采用关键字 EXEC 加上存储过程名称,而后跟随参数的方式。

DECLARE @pdCount INT; -- 定义返回值参数
-- 通过 exec <存储过程名称> <参数列表> 调用存储过程
exec [dbo].[InsertUser] @userno='user-1',@pwd='123',@username='wanger',@email='123@abccom',@count=@pdCount output
select @pdCount as '数据表总数' -- 查询出返回值中的内容

  执行结果如下所示:
在这里插入图片描述

存储过程的意义

  优点:
  1、存储过程加快系统运行速度,存储过程只在创建时编译,以后每次执行时不需要重新编译。
  2、存储过程可以封装复杂的数据库操作,简化操作流程,例如对多个表的更新,删除等。
  3、可实现模块化的程序设计,存储过程可以多次调用,提供统一的数据库访问接口,改进应用程序的可维护性。
  4、存储过程可以增加代码的安全性,对于用户不能直接操作存储过程中引用的对象,SQL Server可以设定用户对指定存储过程的执行权限。
  5、存储过程可以降低网络流量,存储过程代码直接存储于数据库中,在客户端与服务器的通信过程中,不会产生大量的T_SQL代码流量。
  缺点:
  1、数据库移植不方便,存储过程依赖与数据库管理系统, SQL Server 存储过程中封装的操作代码不能直接移植到其他的数据库管理系统中。
  2、不支持面向对象的设计,无法采用面向对象的方式将逻辑业务进行封装,甚至形成通用的可支持服务的业务逻辑框架。
  3、代码可读性差,不易维护。不支持集群。

结语

  为什么需要存储过程:效率高、降低网络流量、复用性高、可维护性高、安全性高。

更多推荐

“undefined reference to XXX“问题总结

"undefinedreferencetoXXX"问题总结引言我们在Linux下用C/C++工作的时候,经常会遇到"undefinedreferencetoXXX"的问题,直白地说就是在链接(从.cpp源代码到可执行的ELF文件,要经过预处理->编译->链接三个阶段,此时预处理和编译已经通过了)的时候,链接器找不到XX

【中秋国庆】旅行公众号文章排版素材大全

中秋国庆节长假即将来临,你是否已经做好了旅行计划?在这个举国同庆的时刻,何不走出家门,去感受大自然的壮美、领略历史的厚重以及品尝地道的美食呢?随着假期的临近,各大公众号纷纷推出了相关文章,为节日的氛围增色添彩。今天小编将为宝子们分享一些旅行公众号文章排版素材,帮助你在这个假期里,呈现出一篇富有诗意和浪漫的旅行日记。在排

NSDT孪生场景编辑器系统介绍

一、产品背景数字孪生的建设流程涉及建模、美术、程序、仿真等多种人才的协同作业,人力要求高,实施成本高,建设周期长。如何让小型团队甚至一个人就可以完成数字孪生的开发,是数字孪生工具链要解决的重要问题。考虑到数字孪生复杂的生产流程,一个面向小型团队的数字孪生开发工具应该考虑以下问题:NSDT编辑器的出现很好解决了以上问题,

day29IO流(其他流)

1.缓冲流昨天学习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流。比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等。这些功能更为强大的流,都是在基本的流对象基础之上创建而来的,就像穿上铠甲的武士一样,相当于是对基本流对象的一种增强。1.1概述缓冲流,也叫高效流,是对4个基

你对java的原子性了解多少?

你对java的原子性了解多少?java的原子性你对java的原子性了解多少?java里的原子性是什么java实现原子性的原理是什么java如何实现原子性java里的原子性是什么在Java中,原子性是指一个操作是不可被中断的整体操作。原子性确保一个操作在多线程环境下执行时,不会被其他线程干扰,要么完全执行成功,要么完全不

Linux用户管理指南:创建、删除、权限、最佳实践,全面掌握用户管理技巧

文章目录Linux用户管理指南1.简介1.1什么是Linux用户管理?1.2为什么Linux用户管理重要?2.用户账户创建和删除2.1创建用户账户2.2删除用户账户2.3设置用户账户的属性3.用户登录和注销3.1远程登录3.2本地登录3.3强制用户注销4.用户密码管理4.1密码策略4.2修改用户密码4.3重置用户密码5

Linux 本地 Docker Registry本地镜像仓库远程连接【内网穿透】

Linux本地DockerRegistry本地镜像仓库远程连接文章目录Linux本地DockerRegistry本地镜像仓库远程连接1.部署DockerRegistry2.本地测试推送镜像3.Linux安装cpolar4.配置DockerRegistry公网访问地址5.公网远程推送DockerRegistry6.固定D

分布式/微服务---第六篇

系列文章目录文章目录系列文章目录一、简述zk的命名服务、配置管理、集群管理二、讲下Zookeeperwatch机制一、简述zk的命名服务、配置管理、集群管理命名服务:通过指定的名字来获取资源或者服务地址。Zookeeper可以创建一个全局唯一的路径,这个路径就可以作为一个名字。被命名的实体可以是集群中的机器,服务的地址

阿里云无影云电脑和传统PC有什么区别?

阿里云无影云电脑和传统电脑PC有什么区别?区别大了,无影云电脑是云端的桌面服务,传统PC是本地的硬件计算机,无影云电脑的数据是保存在云端,本地传统PC的数据是保存在本地客户端,阿里云百科分享阿里云无影云电脑和传统PC电脑的详细区别对比:目录无影云电脑和传统电脑区别对比阿里云无影云电脑无影云电脑和传统电脑区别对比阿里云无

创建型-单例模式-实现和优缺点

一、实现方式:单例模式是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来访问该实例。以下是几种实现单例模式的常见方式:懒汉式(LazyInitialization):这种方式在第一次使用时才创建单例实例,而不是在应用程序启动时就创建。这可以节省资源。publicclassSingleton{privat

数据清洗:数据挖掘的前期准备工作

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️🐴作者:秋无之地🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、留言💬、关注🤝,关注必回关上一篇文章已经跟大家介绍过

热文推荐