SQL 存储过程 超市小票打印

create database chaoshils--创建一个数据库
go
use chaoshils--使用这个数据库
go
create table gongying--创建一个供应商的表格
(
  gcode int primary key identity(1001,1),--供应商编号,主键
  gname varchar(20),--名称
  gsdh varchar(20),--电话
  gsdz varchar(20)--地址
)

--向供应商表格中添加数据
insert into gongying values(‘可口可乐公司‘,‘232323‘,‘山东青岛‘)
insert into gongying values(‘花生油公司‘,‘323232‘,‘山东济南‘)
insert into gongying values(‘绿茶公司‘,‘565656‘,‘山东日照‘)
insert into gongying values(‘矿泉水公司‘,‘656565‘,‘山东潍坊‘)
insert into gongying values(‘红星二锅头公司‘,‘878787‘,‘北京‘)

create table chaoshi--创建一个超市的表格
(
  ccode int primary key,--产品编号
  cname varchar(20),--产品名称
  cshu int,--产品数量
  cjin decimal(18,2),--进价
  cshou decimal(18,2),--售价
  cgcode int --供应商编号,供应商表的外键
)

--向超市表格中添加数据
insert into chaoshi values(10001,‘可口可乐‘,100,2,3,1001)
insert into chaoshi values(10002,‘花生油‘,50,40,80,1002)
insert into chaoshi values(10003,‘绿茶‘,100,8,20,1003)
insert into chaoshi values(10004,‘矿泉水‘,150,1,2,1004)
insert into chaoshi values(10005,‘红星二锅头‘,120,3,5,1005)

--创建一个小票的表格,不能直接插入数据,在下面存储过程中根据商品的销售情况向里面添加数据
create table xiaopiao
(
  xcode int,--产品编号,超市表的外键
  xname varchar(20),--产品名称
  xshu int,--购买的产品数量
  xjiage decimal(18,2),--产品单价
  zjia decimal(18,2)  --产品总价
)

select*from gongying
select*from chaoshi

create proc liushui --创建一个存储过程用来记录卖出货物的数量价格添加于小票表中
@mai int,--返回一个参数,购买的数量
@hcode int--购买的商品的编号
as
begin
declare--声明一下使用下面定义的变量
@name varchar(20),
@shu int,
@danjia decimal(18,2),
@zong decimal(18,2),
@count int
select @name=cname from chaoshi where ccode=@hcode--通过返回参数的商品编号在超市中查找商品名称赋值于变量@name中
select @shu=cshu from chaoshi where ccode=@hcode--通过编号查找此商品现有的而数量赋值于变量@shu中
select @danjia=cshou from chaoshi where ccode=@hcode--通过编号查找此产品的价格赋值于变量@danjia中
set @zong=@danjia*@mai--货物价格@danjia乘以返回参数中购买的数量@mai等于总价格,用变量@zong接收一下

select @count=count(*)from chaoshi where ccode=@hcode--查看一下返回的参数商品编号是否存在,存在值为1,不存在为0,接收于变量@count中

if @count>0--如果@count不为0,则存在这种商品
begin
  if @shu> = @mai--如果超市内商品的数量大于或者等于购买的数量
  begin
   insert into xiaopiao values(@hcode,@name,@mai,@danjia,@zong)--则向xiaopiao表中添加购买信息
   select xcode as 编号,xname as 产品名称,xshu as 购买数量,xjiage as 单价,zjia as 合计 from xiaopiao--把添加到表格中的信息查询一下,列名改为汉字显示
  end
  else if @shu<@mai--如果超市内的商品数量小于购买的数量
  begin
  print‘货物不足‘  --则,货物不足
  end
end
else if @count=0--如果@count值为0,则没有这件商品
begin
print‘没有此商品‘
end

end
go--选中执行此存储过程,只能执行一次

exec liushui 50,10008--此处是执行存储过程liushui并返回两个参数,数量和商品编号,可修改数量以及商品参数选择其他商品
                     --此处商品编号的参数在表中并有此编号的商品,则执行@count=0这一步,没有此商品,因此小票表中就不会添加数                     --据
select*from xiaopiao--查看小票表中存储的数据
时间: 2024-10-14 12:12:23

SQL 存储过程 超市小票打印的相关文章

【JS】通过JS实现超市小票打印功能——ActiveX控件

应客户的需求= = ,要在网页端实现打印小票的功能 先来一张打印出的小票效果图(合计明显不对,因为有修改订单功能,请各位忽略) 用什么方法实现呢:我想应该是有三种吧 1.用第三方的浏览器控件(这个好似比较方便,我的老师也是这样建议我)向大家推荐一个 Lodop打印控件 2.用CSS写好模板,然后直接用页面打印的方法(应该是这样吧) (以上两种还没有尝试,这两天陆续尝试) 3.用微软自己的ActiveX控件(ActiveX控件可以实现调用本地的文件等操作(之前试过调用cmd,实现shutdown

《软件测试自动化之道》读书笔记 之 SQL 存储过程测试

<软件测试自动化之道>读书笔记 之 SQL 存储过程测试 2014-09-28 待测程序测试程序   创建测试用例以及测试结果存储  执行T-SQL脚本  使用BCP工具导入测试用例数据  创建T-SQL 测试套件  当待测存储过程返回行集的时候,如何判断测试结果是否通过  当待测存储过程返回out参数时,如何判断测试结果是否通过  当待测存储过程没有返回值时,如何判断测试结果是否通过 许多基于Windows的系统都使用了SQL Server作为后台组件.待测程序经常通过存储过程来访问数据库.

SQL存储过程+游标 循环批量()操作数据

本人收集的,挺有用的 1. 利用游标循环更新.删除MemberAccount表中的数据 DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT * FROM dbo.MemberAccount) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor ; --读取第一行数据 WHILE @@FETCH_STATUS = 0 BEGIN --UPDATE dbo.MemberAccount SE

SQL存储过程和函数

SQL存储过程: 由来:在具体应用中,一个完整的操作会包含多条SQL语句,在执行过程中需要根据前面SQL语句的执行结果有选择的执行后面的SQL语句.因此,mysql提供了数据库对象存储过程和函数. 定义:存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令.和函数的区别在于,函数有返回值,存储过程没有. 优点: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度.2.当对数据库进行复杂操作时,

插入订单并且输出订单号的sql存储过程

--插入订单-- create proc InsertOrders ( @OrderNumber varchar(300), @OrderState varchar(30), @OrderType varchar(30), @OrderTime DateTime, @OrderFirm varchar(300), @OrderMoney decimal(8,2), @SendWayMoney decimal(8,2), @RegisterId int, @CoalitionOrdersId in

创建sql自定义的函数及商品分页sql存储过程

--商品筛选时判断品牌ID是否存在 --select dbo.isValite(94,94)create function isValite(@brandId int,@bId int)returns intas begin Declare @rNumber int if @brandId = @bId set @rNumber = 1 else set @rNumber = 0 if @bId = 0 set @rNumber = 1 return @rNumberendgo --判断商品筛选

sql存储过程和事务的应用

在去年,学习数据库的时候就学过存储过程了.一直都只知道一些理论,却不知道如何去使用.时隔一年,终于找到如何使用存储过程了. 在机房收费系统中,有些操作,需要多次执行sql语句,多次执行完成才算是完成这个事件流.但是如果其中有一个环节出了错误,那么没出错误的那些操作是不是就多余了. 执行存储过程,就是执行多句SQl语句.而事务,是为了控制这些语句 要么都做,要么 都不做. 在机房收费系统中,执行sql语句的时候. 一般的sql语句使用方法:定义一个字符串,用于存放sql语句.之后指明command

SQL 存储过程 分页

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author: *** -- Create date: 2014-03-27 20:00 -- Description: 采用最新的 row_number() over 技术高效分页方法 -- ============================================= ALTER PRO

SQL 存储过程入门(事务)(四)

SQL 存储过程入门(事务)(四) 本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我们插入的顺序是先插入A,再插入B表,如果都顺利插入成功了,当然没有问题,如果任意一张表插入失败了,而另一张表插入成功了,插入成功的表就是垃圾数据了.我们要判断,任意一张表插入失败都回滚,就是都不插入,这就是事务的基本使用. 一,sql事务定义 所谓事务是用户定义的一个数据库操作序列,是一个不可分割的工作