5.SQL数据库存储过程操作
本篇文章旨在帮助大家熟练掌握SQL数据库存储过程操作,加深大家对SQL数据库存储过程的理解.
文章目录
- 参考表格属性
- 仓库管理类的操作
- 产品销售类的操作
- 进阶!自动生成编号
- 方法1
- 方法2
参考表格属性
见第一篇文章
2.SQL查询语句的操作和练习
仓库管理类的操作
1)插入一个新的供应商元组
CREATE PROC 插入供应商
@GYSNO char(8),
@GYSNAME Varchar(40),
@GYSdz Varchar(40)
AS
INSERT 供应商 VALUES (@GYSNO,@GYSNAME,@GYSdz)
运行
EXEC 插入供应商 S10,土拨鼠工厂,青岛
2)给指定城市的所有仓库增加X m²的面积
CREATE PROC 面积加
@MJ int,
@DZ Varchar(40)
AS
UPDATE 仓库
SET 面积=面积+@MJ
WHERE 城市=@DZ片
运行
EXEC 面积加 55,上海
3)检索某职工发给某供应商的订购单信息\
CREATE PROC 检索
@ZGNO char(8),
@GYSNO char(8)
AS
SELECT *
FROM 订购单
WHERE 职工号=@ZGNO AND 供应商号=@GYSNO
运行
EXEC 检索 E3,S3
4)检索在某城市工作并向某供应商发了订购单的职工号
CREATE PROC 检索职工
@DZ Varchar(40),
@GYSNO char(8)
AS
SELECT 职工号
FROM 仓库 JOIN 职工
ON 仓库.仓库号=职工.仓库号
WHERE 城市=@DZ AND
职工号 IN
(SELECT 职工号 FROM 订购单 WHERE 供应商号=@GYSNO)
运行
EXEC 检索职工 上海,S4
产品销售类的操作
a)查询单价范围在X元到Y元范围内的产品信息
CREATE PROC 查询单价
@min money,
@max money
AS
SELECT *
FROM 产品
WHERE 单价>=@min AND 单价<=@max
运行
EXEC 查询单价 5,15
b)查询在某日期之后签订的订购单的客户信息(客户的名称、联系人和电话号码)、订单号和订购日期
CREATE PROC 日期之后
@time datetime
AS
SELECT 订单号,订购日期,客户.客户名称,客户.联系人,客户.电话号码
FROM 订购单 JOIN 客户
ON 订购单.客户号=客户.客户号
WHERE 订购日期 >@time
运行
EXEC 日期之后 '2008-04-05'
c)更新操作,将某产品的订购日期统一修改为一个指定日期
CREATE PROC 修改日期
@name varchar(40),
@time datetime
AS
UPDATE 订购单
SET 订购日期=@time
WHERE 订单号 IN
(SELECT 订单号 FROM 订购单明细 WHERE 产品号 IN
(SELECT 产品号 FROM 产品 WHERE 产品名称=@name))
运行
EXEC 修改日期 面包,'2998-04-05'
进阶!自动生成编号
在简单练习了SQL的存储过程的操作以后,我们来练习一些高阶程序,做一些更强的功能.
首先,定义一个自动编号数据库
CREATE DATABASE 自动编号
建立一个BOOK表
USE 自动编号
CREATE TABLE BOOK
(BNO char(5)PRIMARY KEY CHECK(BNO LIKE '[0-9][0-9][0-9][0-9][0-9]'),
BNAME Varchar(40))
再创建一个出库单的表
CREATE TABLE 出库单
(出库单号 char(9)PRIMARY KEY CHECK(出库单号 LIKE '[E][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
产品编号 char(4),
数量 int,
单价 money)
提示,两个表中的数据,随意加入几条即可.
我们令出库单号的规则为:诸如"E06110001" ,其中E是固定字符,0611是系统日期(年月),0001是该月的订单批次(依次累加)
那么我们根据需求编写自动生成出库单号的存储过程
方法1
CREATE PROC AUTO_入库
@ROW_ID CHAR(9) OUTPUT
AS
DECLARE @OLDNUM INT,@NEWNUM INT
SELECT @OLDNUM=COUNT(*) FROM 出库单
IF @OLDNUM=0 SET @NEWNUM=1
ELSEBEGINSELECT @OLDNUM=MAX(STR(SUBSTRING(出库单号,6,9))) FROM 出库单SELECT @NEWNUM=@OLDNUM+1END
SET @ROW_ID='E'+REPLACE(STR(MONTH(GETDATE()),2),' ','0')+REPLACE(STR(DAY(GETDATE()),2),' ','0')+REPLACE(STR(@NEWNUM,4),' ','0')
DECLARE @ROW_ID CHAR(9)EXEC AUTO_入库 @ROW_ID OUTPUT
INSERT 出库单 VALUES(@ROW_ID ,'0001',300,5)
方法2
CREATE PROC 自动入库
@NN char(4),
@N int,
@M money
AS
DECLARE @OLDNUM INT,@NEWNUM INT
SELECT @OLDNUM=COUNT(*) FROM 出库单
IF @OLDNUM=0 SET @NEWNUM=1
ELSEBEGINSELECT @OLDNUM=MAX(STR(SUBSTRING(出库单号,6,9))) FROM 出库单SELECT @NEWNUM=@OLDNUM+1END
INSERT 出库单
VALUES('E'+REPLACE(STR(MONTH(GETDATE()),2),' ','0')+REPLACE(STR(DAY(GETDATE()),2),' ','0')+REPLACE(STR(@NEWNUM,4),' ','0'),@NN,@N,@M)
5.SQL数据库存储过程操作相关推荐
- Eclipse连接到My sql数据库之前操作
Eclipse连接到My sql数据库之前操作 1:首先是安装My sql数据库(为了减少你的麻烦,按照下面的连接,下载即可)百度云链接:http://pan.baidu.com/s/1mitWmbm ...
- mybatisplus 操作另一个数据库的数据_c#连接sql数据库以及操作数据库
1.概述 http://ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlCommand对象,负责SQL语句的执行 ...
- C# 连接SQL数据库以及操作数据库
1.概述 ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlCommand对象,负责SQL语句的执行和存储过程的调 ...
- SQL数据库基础操作
1.数据库操作: 防止中文乱码: set names gbk; 1.1 库: 创建数据库设置默认字符集default character set utf8 查看所有库: show databases; ...
- SQL 数据库 存储过程 视图
一.存储过程 1.概述 存储过程是一组编译在单个执行计划中的T-SQL语句 存储过程:就像函数一样的会保存在数据库中(可编程性) 存储过程的优点: 1.允许模块化程序设计 2.允许更快执行如果某操作需 ...
- python调用sql数据库_Python3操作SQL Server数据库(实例讲解)
1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...
- SQL数据库层面操作(DDL)
DDL(Data Definition Language 数据定义语言)用于对数据库和数据表的操作,因为操作对象有两个(数据库和数据表),所以我们要在每个命令之后(create.drop.alter. ...
- Windform对sql数据库进行操作
链接数据库 static string connstr = "Data Source=.;Initial Catalog=数据库名;Integrated Security=True" ...
- SQL数据库脚本操作(WINCC VBS脚本)
1.首先看下数据库的连接:连接字符串 '连接字符串' 1."Provider=SQLOLEDB.1;Persist Security Info=False;User ID=;PassWord ...
最新文章
- Python每日一练0023
- 计算机语言学教程,《语言学教程》-中文笔记(完整).doc
- 机器人学习--全局定位(阿尔伯塔大学张宏教授报告)
- 开源开放 | 中文相对复杂词汇识别数据集RCWI-Dataset(CCKS2021)
- 用uGUI开发自定义Toggle Slider控件
- java关键字:volatile
- preprocessor预处理器
- Guitar Pro8(简称GTP8)正式版吉他谱神器
- 华硕重装系统键盘灯失效 =重装ATK驱动
- 宝塔面板安装和使用教程(详细)
- C++代码实现图片调色
- 烽火2640路由器命令行手册-04-网络协议配置命令
- GT9xx触摸屏驱动总结
- CSS文本超过两行用省略号代替(兼容所有浏览器)
- win10系统安装打印机失败如何解决?
- 焱融看|混合云环境下,如何实现数据湖最优存储解决方案
- 量子运算-比算子描述更广泛的一类刻画量子态在客观世界演化的数学工具
- Python面试题笔试题Django部分总结
- 牛客网wannafly挑战赛13-D(贪心)
- OFC2020论文阅读 Th2A.48 Concept and Experimental Demonstration of Optical IM/DD End-to-End System Optimi
热门文章
- Floyd算法求解最短距离
- 【Python网络开发-黏包问题(三)黏包问题的解决办法】
- java现实图片头像抓取
- 原生JavaScript小白入门001之HTML为<script>标签定义的6种属性
- Linux查看opencv 版本
- linux系统下“rwx“的概念及用法~
- 【开源我写的富文本】打造全网最劲富文本系列之大话技术难点与特色设计。...
- 支持html的免费建站,20个非常不错的HTML5免费建站模板
- 赵丽颖明星人物介绍html源码 html期末大作业 课程设计
- 36进制与10进制之间的转换