我的编程空间,编程开发者的网络收藏夹
学习永远不晚

3. SQL -- 存储过程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

3. SQL -- 存储过程

存储过程

在Sql Server中,可以定义子程序存放在数据库中,这样的子程序称为存储过程,它是数据库对象之一.

存储过程的优点:

1: 存储过程在服务器端运行,执行速度快

2: 存储过程只执行一次,然后把编译的二进制代码保存在调整缓存中,以后可从中调用,提高系统的性能.

3: 确保数据库的安全.使用存储过程可以完成所有的数据库操作,并可通过编程方式来控制

4: 自动完成所需要的预先势利的任务.方便客户

存储过程的类型(五类)

(1)     系统存储过程. 由系统提供的存储过程,可以作为命令执行各种操作.定义在系统数据库master中,前缀是sp_,例如常用的显示系统对象信息的sp_help存储过程

(2)     本地存储过程. 指用户数据库中创建的存储过程,这种存储过程完成特定的数据库任务

(3)     临时存储过程. 它属于本地存储过程,如果存储过程前面有一个’#’代表局部临时存储过程,如果有’##’代表全局临时存储过程,可以在所有的用户会话中使用.

(4)     远程存储过程. 指从远程服务上调用的存储过程

(5)     扩展存储过程. 在SQL Server环境之外执行的动态链接库称为扩展存储过程,前缀_sp,使用时要先加载到SQL Server系统中

三创建用户存储过程

    用户存储过程只能定义在当前数据库中,可以使用SQL语句,也可使用企业管理器,这里只用SQL语句,注意存储过程中不能定义如下的对象:

         Create view               (视图)

         Create default          (缺省)

         Create rule                (规则)

         Create procedure    (存储过程)

         Create trigger          (触发器)

1: 通过Sql命令来创建和执行存储过程(假设使用学生表)

    定义如下存储过程:

           Use student

           Go

           Create procedure student_grade

           As

           Select stu.stuID,stu.name,course.name,course.grade

                    From student_table as stu,course_table as course

                    Where stu.stuID=course.stuID and stu.courseID=course.courseID

使用存储过程:

Exce student_grade

Go

2: 创建存储过程语法格式

Create proc[edure] procedure_name [;number] –定义过程名

[{@parameter data_type}]                                   --定义参数的类型

[varying][ =default][output]                                    --定义参数的属性

[,…n1]

[with {recompile|encryption|recompile,encryption}] –定义存储过程的处理方式

[for replication]

As sql_statement[…n2]                                                 --执行的操作(所有的sql语句都可以)

说明:

(1)     参数number为可选的整数,用于区分同名的存储过程,以便用一条drop procedure语句删除一组存储过程

(2)     @parameter 为存储过程的形参,@符号作为第一个字符来指定参数名称.data_type为参数的数据类型(如int或varchar(32)等)

(3)     Default指定存储过程输入参数的默认值,必须是常量或NULL,默认值中可以有通配符(%,_,[]和[^])

(4)     Recompile表明每次运行该过程时,要重新编译;

Encryption表示SQL server加密syscomments表中包含create procedure语句文本的条目,就是加密了,别人复制数据库而不能复制它,以防以存储过程来读取数据库中定义

(5)     参数n2说明一个存储过程可以包含多条T-SQL语句

3: 存储过程要注意的几点:

(1)     用户定义的存储过程只能在当前数据库中使用(临时过程除外)

(2)     成功执行create procedure语句后,过程名存储在sysobjects系统表中,而create procedure语句的文本存储在syscomments中

(3)     自动执行存储过程.SQL Server启动时可自动执行一个或多个存储过程,这些存储过程必须定义在master数据库中,并在sysadmin固定服务器角色作为后台过程执行,并且不能有任何的参数

(4)     Sql_statement语句限制必须使用对象所有者名(就是这个数据库的所有者)对数据库对象进行限定的语句有:

Create table, alter table, drop table, truncate table, create index, drop index, update statistics及DBCC语句

(5)     权限. Create procedure的权限默认授予sysadmin固定服务器角色成员,db_ower和db_ddladmin默写数据库角色成员.可以把权限转让.

4: 存储过程执行语法

[exce[ute]]

{[@return_staus = ]

{procedure_name[;number]|@procedure_name_var}

[[@parameter = ]{value|@variable[ouput]|[default]}

[,..n]

[with recompile]}

说明:

         @return_status为可选的×××变量,保存存储过程的返回状态,execute语句使用该变量前,必须对其定义.

         Procedure_name和number用于调用定义一组存储过程中一某一个,procedure_name代表了存储过程的组名,number用来指定哪一个.

         Procedure_name_var为create procedure中定义的存储过程名

         @parameter为create procedure中定义的参数名,value为存储过程的实参;

         @variable为output参数返回的值

         Default表示不提供实参,而是使用对应的默认值

         n 表示可以实参可以有多个


(1)     设计简单的存储过程

从student数据库的三个表中查询,返回学生学号,姓名,课程名,成绩,学分

Use student

--检查是否已存在同名的存储过程,或有,删除

If object_id('student_info') is not null

           Drop procedure student_info

Go

Create procedure student_info

As

Select a.studentID,a.sname,c.cname,b.grade

           From student_table as a inner join student_course_table as b

                    On a.studentID = b.studentID inner join course_table as c

                    On b.courseID = c.courseID

       

执行:

exec student_info

或execute student_info

(2)     使用带参数的存储过程

从student数据库的三个表中查询某个人指定的成绩和学分

Use student

If exists(select name from sysobjects where name='student_info1' and type='p')

           Drop procedure student_info1

Go

Create procedure student_info1

           @sname char(8),@cname char(16)

As

Select a.studentID,a.sname,c.cname,b.grade

           From student_table as a inner join student_course_table as b

                    On a.studentID = b.studentID inner join course_table as c

                    On b.courseID = c.courseID

           where a.sname=@sname and c.cname=@cname

执行:(多种方式

 execute student_info1 ‘王五’,’C语言’

 Exec student_info1 @name=’王五’,@cname=’C语言’

(3)     使用带有通配符参数的存储过程

从三个表的连接中返回指定学生学号,姓名,所选课程名称及成绩,该存储过程使用了模式匹配,如果没有提供参数,则使用预设的默认值

Use student

If object_id('stu_info') is not null

           Drop procedure stu_info

Go

Create procedure stu_info

           @name varchar(30)='王%'

As

Select a.studentID,a.sname,c.cname,b.grade

           From student_table a inner join student_course_table b

                    on a.studentID = b.studentID inner join course_table c

                    on b.courseID =c.courseID

           where a.sname like @name

go     

        执行该存储过程

使用默认参数;execute stu_info

使用实参; exec stu_info @name=’王%’ 或exec stu_info ‘王%’

(4)     使用带output参数的存储过程

用于计算指定学生的总学分,存储过程中使用了一个输入参数和一个输出参数

Use student

Go

If exists(select name from sysobjects where name='totalcredit' and type='p')

           Drop procedure totalcredit

Go

Create procedure totalcredit @name varchar(30),@total int OUTPUT

As

Select @total=sum(grade)

           From student_table a,student_course_table b,course_table

           Where a.sname=@name and a.studentID=b.studentID

           Group by a.studentID

Go

注意:output变量必须在定义存储过程和使用该变量时都定义

 

执行:

Declare @t_credit char(20),@total int --@total将作为OUTPUT变量必须先定义

Exec totalcredit ‘王五’,@total OUTPUT ---OUTPUT必须为大写

Select ‘王五’,@total

go


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

3. SQL -- 存储过程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

3. SQL -- 存储过程

存储过程在Sql Server中,可以定义子程序存放在数据库中,这样的子程序称为存储过程,它是数据库对象之一.一存储过程的优点:1: 存储过程在服务器端运行,执行速度快2: 存储过程只执行一次,然后把编译的二进制代码保存在调整缓存中,以后可
2023-01-31

SQL存储过程简介

存储过程概述存储过程是完成特定功能的一组SQL语句,它是数据库的一种可编程对象,类似于函数其快速、灵活、安全系统存储过程SQL sever 内置的存储过程,存储在master库中,主要用于执行SQL sever的某些功能、显示有关数据库和用户的信息。系统存储过
SQL存储过程简介
2020-01-05

Mariadb/MySQL存储过程中的3

在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环。还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体介绍了。这几个循环语句的格式如下:WHI
2023-01-31

sql怎么写存储过程

如何使用 sql 创建存储过程存储过程是存储在数据库中的一组预编译 SQL 语句,可以在以后通过单个调用来执行。创建存储过程可以提高查询性能、简化代码并增强安全性。语法CREATE PROCEDURE 语句用于创建存储过程:CREA
sql怎么写存储过程
2024-05-30

SQL-视图与存储过程

原文:https://www.cnblogs.com/ccccz/p/13982650.html
SQL-视图与存储过程
2015-05-07

sql存储过程怎么调试

调试 sql 存储过程的步骤:启用输出调试信息;设置断点;调试存储过程;检查调试信息;逐步执行代码;查看局部变量;修复错误并重新调试。SQL 存储过程调试指南如何调试 SQL 存储过程?调试 SQL 存储过程需要一个系统化的步骤:步骤
sql存储过程怎么调试
2024-05-30

sql存储过程怎么监控

监控 sql 存储过程可以提高可靠性并优化性能。指标包括执行时间、执行次数、状态码、输入参数和数据库资源消耗。可使用 dbms、第三方工具或自定义脚本进行监控。步骤包括识别关键存储过程、设置阈值、收集数据、分析数据和采取行动。好处包括提高可
sql存储过程怎么监控
2024-05-30

sql存储过程怎么运行

sql 存储过程是预先编译的 sql 语句集合,用于执行复杂操作,提高性能。运行存储过程的步骤包括:1) 创建存储过程(使用 create procedure);2) 调用存储过程(使用 exec 语法,指定模式、名称和参数)。SQL 存储
sql存储过程怎么运行
2024-06-03

SQL级别存储过程优化

SQL级别的存储过程优化是指对存储过程中的SQL语句进行优化,以提高存储过程的性能和效率。以下是一些常见的SQL级别存储过程优化方法:索引优化:确保存储过程中涉及的表都有合适的索引,以提高查询性能。可以通过分析查询执行计划来确定哪些索引是必
SQL级别存储过程优化
2024-08-03

sql怎么查看存储过程

如何查看 sql 存储过程的源代码:使用 show create procedure 语句直接获取创建脚本。查询 information_schema.routines 表的 routine_definition 列。查询 sys.obje
sql怎么查看存储过程
2024-05-14

sql存储过程日志怎么写

sql 存储过程日志可用于跟踪存储过程执行和诊断问题。步骤包括:启用日志记录创建存储过程执行存储过程查看日志文件分析日志文件配置日志文件(可选)SQL 存储过程日志SQL 存储过程日志可以帮助您跟踪存储过程的执行,并诊断任何潜在问题。以下
sql存储过程日志怎么写
2024-06-24

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录