SQLSERVER存储过程详解及应用示例

3星 · 超过75%的资源 需积分: 10 7 下载量 78 浏览量 更新于2024-07-27 收藏 62KB DOC 举报
"SQLSERVER存储过程大总结" 在SQL Server中,存储过程是预编译的SQL语句集合,它们可以包含一系列的数据处理操作,如查询、插入、更新和删除等。存储过程不仅可以提高数据库的性能,还可以提高代码的可重用性和安全性。下面将深入探讨存储过程的创建、调用以及一些重要的概念。 1. **存储过程的创建** 创建存储过程使用`CREATE PROCEDURE`语句,如示例所示,定义了一个名为`query_book`的存储过程,它会返回`book`表中的所有数据。存储过程的定义中可以包含参数,这些参数可以用于传递值到存储过程中,使得存储过程更加灵活和通用。 ```sql CREATE PROCEDURE query_book AS SELECT * FROM book GO ``` 2. **调用存储过程** 要执行存储过程,可以使用`EXEC`或`EXECUTE`关键字,如示例所示: ```sql EXEC query_book ``` 3. **存储过程的语法** - `procedure_name`:存储过程的唯一名称,可以是本地的(#开头)或全局的(##开头)。 - `;number`:可选,用于将同名过程分组,便于一起删除。 - `@parameter`:定义参数,允许设定数据类型、是否可变、默认值和是否为输出参数。 4. **参数详解** - 数据类型:参数可以是SQL Server支持的任何数据类型。 - `VARYING`:表示参数可以是变量长度的数据类型,如VARCHAR。 - `OUTPUT`:将参数设置为输出参数,允许存储过程修改其值并返回给调用者。 - `default`:为参数提供默认值,调用者可选择不提供。 - 最多2100个参数:每个存储过程可以接受大量参数,增加代码的灵活性。 5. **其他选项** - `WITH RECOMPILE`:每次调用存储过程时都重新编译,适合于动态SQL,但可能影响性能。 - `WITH ENCRYPTION`:加密存储过程的文本,增强安全性,但不利于调试。 - `FOR REPLICATION`:用于复制目的,与复制代理相关。 6. **存储过程的优势** - 性能优化:由于预编译,执行效率高。 - 代码复用:存储常用操作,减少重复编写SQL。 - 安全性:通过权限控制,限制对数据库的直接访问。 - 可维护性:封装复杂的逻辑,方便管理和修改。 7. **使用技巧** - 使用参数化查询防止SQL注入。 - 使用IF/ELSE或CASE结构实现条件分支。 - 使用BEGIN/END块组织复杂的逻辑。 - 返回值或结果集来传递处理结果。 - 使用`SET NOCOUNT ON`防止返回行计数,提升性能。 SQL Server的存储过程是数据库开发中的重要工具,熟练掌握存储过程的创建、调用及参数使用,能显著提升数据库应用的效率和质量。在实际工作中,根据具体需求选择合适的方式来设计和使用存储过程,是提高数据库管理效率的关键。
2019-09-21 上传
SQL查询一 实验学时:2   实验类型:验证 实验要求:必修 一、实验目的 通过本实验使学生掌握单表查询并初步掌握多表查询的技能。 二、实验内容 使用实验一建立的银行贷款数据库和表,完成以下查询。 1-10题为单表查询,11-25为多表查询。 查询所有法人的法人代码、法人名称、经济性质和注册资金。 查询“B1100”银行的的银行名称和电话。 查询贷款金额在2000至4000万元之间的法人代码、银行代码、贷款日期和贷款金额。 查询2009年1月1日以后贷款且贷款期限是10年的法人代码。 查询贷款期限为5年、10年或15年的贷款信息。 查询经济性质为“私营“的所有法人的最高注册资金、最低注册资金和平均注册资金。 查询每种经济性质的法人的经济性质、最高注册资金、最低注册资金和平均注册资金。 统计每个法人的法人代码和贷款总次数,要求查询结果按贷款总次数的升序排列。 查询贷款次数超过3次的法人的平均贷款金额和贷款次数。  统计每种经济性质贷款的法人的总数和其平均贷款金额,列出平均贷款金额前三名的经济性质、法人总数和平均贷款金额。  查询贷款期限为5年、10年或15年的法人名称、银行名称、贷款日期、贷款金额和贷款期限。  查询经济性质为“国营”的法人在“上海”的银行贷款的信息,列出法人名称、银行名称和贷款日期。  查询与“B1100”银行在同一城市(假设银行名称的第5和第6个字符为城市名称)的其他的银行的名称。  查询哪些银行没有贷过款,列出银行号和银行名称。分别用多表连接和子查询两种方式实现。  查询贷过款的所有法人的名称,贷款银行名称,贷款日期,贷款金额,要求将查询结果放在一张新的永久表New_LoanT中,新表中的列名分别为:法人名称、银行名称、贷款日期和贷款金额。  分别查询经济性质“国营”和“私营”的法人名称,贷款银行名称,贷款日期,贷款金额,要求将这两个查询结果合并成一个结果集,并以法人名称、银行名称、贷款日期和贷款金额作为显示列名,结果按贷款日期的升序和贷款金额的降序显示。 使用实验一建立的学生数据库和表,完成以下查询 查询计算机系没有选课的学生的姓名和年龄。 统计‘VB’课程的考试最高分、最低分和平均分。 统计‘数据库’课程的选课人数。 统计计算机系学生’vb’课程考试的最高分、最低分、平均分。  统计每个系学生’vb’课程考试的最高分、最低分、平均分,列出系名和三个分数。 查询每个学生的修课总学分,并进行如下处理:如果总学分高于10分,则显示‘好学生’;如果总学分在6到10分间,则显示‘一般学生’;如果总学分低于6分,则显示‘不好学生’。 统计每个系每个学生的修课门数和平均成绩,如果修课门数大于3并且平均成绩高于90的显示‘优秀’;如果修课门数大于3并且平均成绩在80~90,则显示‘较好’;对于修课门数小于等于3的并且平均成绩高于90的显示‘较好’;如果修课门数小于等于3并且平均成绩在80~90,则显示‘一般’;其他情况显示为‘应努力’。列出系名、学号、原修课门数和平均成绩以及处理后的显示结果。 查询计算机系学生考试成绩最低的两个成绩所对应的学生的姓名、课程名和成绩。 列出没有选课的学生的学号、姓名和所在系。 三、思考题 1、创建表: 教师表(   tid 普通编码定长字符型,长度为10,主关键字   tname 普通编码定长字符型,长度为10,非空 zc 普通编码定长字符型,长度为6) 设此表数据如下: tid Tname zc T1 A 教授 T2 B 副教授 T3 C 教授 编写SQL语句,使查询的结果显示为如下形式: 教师号 教师名 教授 副教授 T1 A 教授 T2 B 副教授 T3 C 教授 2、创建表: 教师表(   tid 普通编码定长字符型,长度为10,主码   tname 普通编码定长字符型,长度为10,非空 zc 普通编码定长字符型,长度为6 Salary 工作,整型) 设此表数据如下: tid Tname zc Salary T1 A 教授 5000 T2 B 副教授 4000 T3 C 教授 5000 编写SQL语句,使查询的结果显示为如下形式: 教师号 教师名 教授工资 副教授工资 T1 A 5000 Null T2 B Null 4000 T3 C 5000 Null 四、实验报告 将实验结果反映在实验报告中,并对实验中遇到的问题及解决方案进行整理、分析总结,提出实验结论或自己的看法。