SQL语句(十八)—— 存储过程
存储过程
系统存储过程
自定义存储过程
扩展存储过程
一、创建存储过程
创建存储过程
--例1
USE SU
GO
Create Procedure SelProc
AS
Select *
From SC
GO --例2
USE SU
GO
Create Procedure CountProc
AS
Select Count(*) AS 总数
From Course
Go
2. 存储过程调用
USE SU
GO
Exec SelProc
Exec CountProc
3. 创建带输入参数的存储过程
--例1 创建 带输入参数 的存储过程
USE SU
GO
Create Procedure QueryById @Sno varchar()
AS
Select *
from SC
Where Sno = @Sno
GO
--执行
GO
Execute QueryById ''
Execute QueryById @Sno = '' --创建 带默认参数 的存储过程
USE SU
GO
create Procedure QueryById2 @Sno varchar() = ''
AS
Select *
From SC
where Sno = @Sno
GO
--执行(可以不带参数, 因为有默认参数)
EXecute QueryById2
4. 创建带输出参数的存储过程(执行时候,需要声明!!!!!!)
--例4
Use SU
GO
Create Procedure QueryById3
@Sno varchar() = '',
@Cnocount INT OUTPUT --输出参数,Sno学号选的课程数
AS
Select @Cnocount = Count(SC.Cno)
From SC, Student
where SC.Sno = Student.Sno and SC.Sno = @Sno
GO
--执行
--必须先声明!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Declare @Sno varchar() = '';
Declare @Cnocount int; --声明之后再执行
EXEC QueryById3 @Sno, @Cnocount OUTPUT
Select '学号为' + @Sno + '选了' + Ltrim(STR(@Cnocount)) + '门课' --字符串还需要处理一下
GO
二、管理存储过程
1. 修改存储过程
------------管理存储过程------------------
--修改存储过程
exec CountProc --查询
GO
Alter Procedure CountProc
AS
select Sno, COUNT(*) AS 总数
From SC
Group By Sno --查看属性
GO
select OBJECT_DEFINITION(OBJECT_ID('QueryById')); --select OBJECT_DEFINITION(OBJECT_ID('存储过程名'));
Exec sp_help QueryById
Exec sp_helptext QueryById --删除操作
GO
DROP procedure 存储过程
三、扩展存储过程
可以将参赛传递过扩展存储过程,扩展存储过程也可以返回结果和状态
--查看系统版本信息
EXEC xp_msver
四、自定义函数(允许模块化程序设计)
1. 创建标量函数
--创建一个标量函数,指定学生id值,返回该学生姓名
GO
Create Procedure Snotosname @Sno varchar() = ''
AS
Begin
Declare @Sname varchar()
Select @Sname = (
Select Sname
From Student
where Sno = @Sno)
RETURN @Sname
End
2. 创建表值函数
--例1
GO
Create Function getStuRecordBySex(@Ssex char())
Returns Table
Return
(
select Sno, Sname, Ssex, (Sage + ) as newAge
From Student
where Ssex = @Ssex
)
--执行这个函数
--执行函数
Select *
From getStuRecordBySex('男')
3. 删除函数
--删除函数
Drop Function getStuRecordBySex
SQL语句(十八)—— 存储过程的更多相关文章
- SQL 语句调用这个存储过程,生成顺序编码
一直很讨厌存储过程,没想到今天帮了我大忙啊,或许会因为今天让我慢慢喜欢上存储过程吧,不多说了,切入正题 在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这 ...
- LINQ to SQL语句(20)之存储过程
在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的几个存储过程来理解一下. 1.标量返回 在数据库中, ...
- 【存储过程】用SQL语句获得一个存储过程返回的表
定义一个存储过程如下: create proc [dbo].[test1] @id int as select 1 as id,'abc' as name union all select @id a ...
- Mysql常用sql语句(八)- where 条件查询
测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...
- 用SQL语句获得一个存储过程返回的表
1. 定义一个表变量 declare @table table(ReportType nvarchar(30),ReportPath nvarchar(200),ParaCnt int,DataAre ...
- 动态sql语句,非存储过程,如何判断某条数据是否存在,如果不存在就添加一条
已知一个表 table 里面有两个字段 A1 和 A2 如何用动态语句 判断 A1 = A , A2=B 的数据是否存在,如果不存在,就添加一条数据, A1 = A , A2 = B INSERT ...
- sql 语句随机时间存储过程
CREATE PROC [dbo].[Proc_GetRandomTime](@startTime datetime,@endTime datetime,@date datetime output ) ...
- 必须会的SQL语句(八)数据库的完整性约束
实体完整性 1.建表时定义主键 Create table 表名 ( Sno int identity(1,1), Sname nvarchar(20), ...
- SQL语句(八)按条件查询
SELECT * FROM student SELECT sclass, snumb, sname FROM student --物理班有哪些同学 --年龄小于20岁的有哪些同学? --定价在30元以 ...
- MySQL存储过程动态SQL语句的生成
用Mysql存储过程来完成动态SQL语句,使用存储过程有很好的执行效率: 现在有要求如下:根据输入的年份.国家.节假日类型查询一个节假日,我们可以使用一般的SQL语句嵌入到Java代码中,但是执行效率 ...
随机推荐
- Teamwork(The eighth day of the team)
在经过算是蛮艰辛的努力后吧,我们终于有了一点点成果.虽然还离理想中的蛮遥远的,但是我们相信,虽然我们走得很慢,但是我们一直都会坚持前进.
- Week4-作业1:《构建之法》第四章、第十七章 阅读笔记与思考
第四章 两人合作 这一章是讲述了两人结对编程的一些东西,包括一些代码的规范,还有结对编程的优点.怎么做.以及一些注意事项. 1.“错误处理 当程序的主要功能实现后,一些程序员会乐观地估计只需要另外 ...
- 信息安全C散列函数的应用及其安全性2016011992
1:散列函数的具体应用 使用一个散列函数可以很直观的检测出数据在传输时发生的错误. MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验(Checks ...
- 团队作业7——第二次项目冲刺(Beta版本12.04——12.07)
1.当天站立式会议照片 本次会议在5号公寓3楼召开,本次会议内容:①:熟悉每个人想做的模块.②:根据项目要求还没做的完成. 2.每个人的工作 经过会议讨论后确定了每个人的分工 组员 任务 陈福鹏 实现 ...
- 搭建zabbix详细步骤
关闭selinux和防火墙 selinux关闭: 1 命令查看出selinux的状态sestatus -v2 临时关闭 selinuxsetenforce 03 永久关闭selinuxvi /etc/ ...
- requests爬取豆瓣热门电视剧
# *_*coding:utf-8 *_* import requests payload = {'key1': 'value1', 'key2': 'value2'} headers = {'use ...
- windows多线程(一) 创建线程 CreateThread
一 线程创建函数 CreateThread 修改说明: 这里 说了另一种创建线程方法,使用_beginthreadex()更安全的创建线程,在实际使用中尽量使用_beginthreadex()来创建线 ...
- IPV6 简单验证
1. 网络路由器的分类 .通常将网络中直接面向用户连接或访问网络的部分称为接入层,接入层目的是允许终端用户连接到网络,因此接入层交换机具有低成本和高端口密度特性: .将位于接入层和核心层之间的部分称为 ...
- centos7防火墙操作
启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : s ...
- ZooKeeperACL机制
官网:http://zookeeper.apache.org/doc/r3.4.6/zookeeperProgrammers.html#sc_ZooKeeperAccessControl 项目中不同的 ...