当前位置: 首页 > news >正文

Sql Server系列:开发存储过程

  客户/服务器开发的主要目的在于将处理数据的程序移动到离数据尽可能近的地方。通过将处理数据的程序从客户应用程序移动到服务器,可以降低网络流量,并提高性能和数据的完整性。

  要将处理数据的程序移动到离数据更近的地方,最常用的方法之一就是开发存储过程。

1、管理存储过程

1.1、create、alter和drop

  存储过程是由如下的数据定义语言命令来管理的:create、alter和drop。

  create用于创建存储过程,它是批处理中的第一个命令,批处理的正常结束就意味着存储过程创建成功。drop命令会从数据库中删除存储过程,alter命令会将原有的存储过程替换为新的代码。如果要修改存储过程,最好采用alter方法,而不要使用先删除,再重建的方式,因为后一种方法会丢失原来存储过程上所有的权限设置。

CREATE PROCEDURE CategoryList
AS
    SELECT CategoryName FROM Category

1.2、返回记录集

  存储过程可以返回记录集。

EXEC CategoryList

1.3、编译存储过程

  对应存储过程的编译是自动进行的。在第一次执行存储过程的时候,就会对存储过程进行编译,并将编译结果保存在内存中。如果重新启动了服务器,所有存储过程的编译结果就全部丢失。只有当再次调用它们时,才会重新对它们进行编译。

  SQL Server使用Master.dbo.SysCacheObjects表来记录编译过的对象。要查看编译过的存储过程,可以运行下面的查询:

SELECT CASE(C.sql AS CHAR(35)) AS StoreProcedure, cacheobjtype,usecounts AS Count
FROM Master.dbo.SysCacheObjects C
JOIN Master.dbo.SysDatabases D
ON C.dbid = D.dbid
WHERE D.Name = DB_Name()
AND ObjType = 'Proc'
ORDER BY StoreProcedure

2、向存储过程传递数据

  SQL Server存储过程可以使用很多的输入和输出参数。

2.1、输入参数

  如果要使用输入参数向存储过程传递数据,可以在create procedure命令中的存储过程名之后列出需要添加的参数。每个参数都必须以@开始,一旦声明了输入参数,它就会成为该存储过程中的局部变量。就像声明局部变量一样,必须使用合法的数据类型来定义输入参数。在调用存储过程时,必须为这些输入变量提供值(除非该输入变量具有默认值)。

相关文章:

  • 学Java的能从事前端吗?
  • Find INTCOL#=1001 in col_usage$?
  • 比特币的矿工为什么讨厌开发组Core?
  • 有哪些功能是DBMS_STATS无法实现而Analyze命令可以做到的?
  • Kafka 1.1新功能:数据的路径间迁移
  • Toast 学习
  • AutoCAD 命令统计魔幻球的实现过程--(3)
  • SeimiCrawler 2.0版本变动介绍
  • DNS服务的配置与管理(5) 配置转发器
  • 基于注解实现SpringBoot多数据源配置
  • shell if 参数
  • 换个角度看问题
  • Lr(3)-脚本调试之“参数化、检查点”
  • 添加删除mysql用户
  • dp学习笔记1
  • canvas 高仿 Apple Watch 表盘
  • JAVA_NIO系列——Channel和Buffer详解
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • python学习笔记-类对象的信息
  • webgl (原生)基础入门指南【一】
  • 从重复到重用
  • 聚类分析——Kmeans
  • 码农张的Bug人生 - 初来乍到
  • 三分钟教你同步 Visual Studio Code 设置
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 收藏好这篇,别再只说“数据劫持”了
  • 学习笔记TF060:图像语音结合,看图说话
  • puppet连载22:define用法
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • (2020)Java后端开发----(面试题和笔试题)
  • (31)对象的克隆
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (ZT)一个美国文科博士的YardLife
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)计算机毕业设计大学生兼职系统
  • (南京观海微电子)——COF介绍
  • (三分钟)速览传统边缘检测算子
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四) 虚拟摄像头vivi体验
  • (转)h264中avc和flv数据的解析
  • .htaccess配置重写url引擎
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [.net]官方水晶报表的使用以演示下载
  • [2023-年度总结]凡是过往,皆为序章
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [EFI]Dell Inspiron 15 5567 电脑 Hackintosh 黑苹果efi引导文件
  • [hihocoder1395] 最大权闭合子图
  • [leetcode] 四数之和 M
  • [LOJ161] 仙人掌计数
  • [one_demo_11]二分查找法