SQL server 笔记7

--进出货,存储过程的应用实例

create database mydb --创建数据库
go
use mydb --连接数据库
go
--水果表
create table Fruit
(
    Ids varchar(50) primary key,
    [Name] varchar(50) not null,
    Price decimal(8,2),
    Source varchar(50),
    Stack varchar(50),
    Numbers int,    --库存数量
    [Image] varchar(50)
)
go
insert into fruit values(‘k001‘,‘苹果‘,2.4,‘烟台‘,‘2‘,100,‘image/0.gif‘)
insert into fruit values(‘k002‘,‘菠萝‘,1.4,‘广东‘,‘3‘,100,‘image/1.gif‘)
insert into fruit values(‘k003‘,‘桔子‘,2.4,‘福州‘,‘3‘,100,‘image/2.gif‘)
insert into fruit values(‘k004‘,‘葡萄‘,2.4,‘新缰‘,‘2‘,100,‘image/3.gif‘)
insert into fruit values(‘k005‘,‘樱桃‘,2.4,‘青岛‘,‘4‘,100,‘image/4.gif‘)
insert into fruit values(‘k006‘,‘桃子‘,2.4,‘花果山‘,‘5‘,100,‘image/5.gif‘)
insert into fruit values(‘k007‘,‘香蕉‘,2.4,‘济南‘,‘5‘,100,‘image/6.gif‘)

--用户表
create table Login
(
    UserName varchar(50) primary key,    --用户名
    [Name] varchar(50),    --真实姓名
    Password varchar(50),    --密码
    Account decimal(18,2)    --账户余额
)
go
insert into login values(‘zhangsan‘,‘张三‘,‘666666‘,50)
insert into login values(‘lisi‘,‘李四‘,‘666666‘,50)
insert into login values(‘wangwu‘,‘王五‘,‘666666‘,50)

--订单表
create table Orders
(
    Code varchar(50) primary key,    --以“用户名yyyyMMddhhmmssms”的形式作主键
    UserName varchar(50) references Login(Username),    --订购人员代号
    OrderTime datetime,    --订购时间
)
go

--订单内容表
create table OrderDetails
(
    Ids int identity primary key,
    OrderCode varchar(50) references Orders(Code),--订单号
    FruitCode varchar(50) references Fruit(Ids),--水果代号
    [Count] int ,    --水果的个数
)
go

select * from fruit
select * from login
select * from orders
select * from orderdetails


----进销存存储过程
use mydb
go
select*from Fruit
create proc jinchuhuo --创建存储过程
@ids varchar(50),--输入参数
@name varchar(50),
@price decimal(8,2),
@source varchar(50),
@stack int,
@numbers int,--正数进货,负数出货
@image varchar(50)
as
    if @numbers>0 --正数则执行以下操作
    begin
    declare @shuliang1 int --声明一个变量,来接收查询结果
    select @shuliang1=COUNT(*)from Fruit where ids=@ids--查询库中有木有这种水果
        if @shuliang1>0--有,修改数据库
        begin
        declare @shuliang3 int--声明一个变量,来接收查询结果
        select @shuliang3=Numbers  from Fruit where Ids=@ids --查询这种水果有多少
        update Fruit set Numbers=Numbers+@numbers where Ids=@ids --修改表
        print ‘已修改库存,现有存货‘
        return @shuliang3+@numbers --返回值
        end
        else--木有这种水果,则插入这条新的信息
        begin
        insert into Fruit values(@ids,@name,@price,@source,@stack,@numbers,@image)
        print ‘已经新增进货数据,现有库存‘
        return @numbers --返回值
        end
    end
    else --小于0,则出货
    begin
    declare @shuliang2 int
    select @shuliang2=COUNT(*)from Fruit where ids=@ids--查询库中有木有这种水果
        if @shuliang2>0
        begin
        declare @shuliang4 int
        select @shuliang4=Numbers  from Fruit where Ids=@ids
            if @shuliang4>ABS(@numbers) --库存数量足够,则出库,修改数据库
            begin
            update Fruit set Numbers=Numbers+@numbers where Ids=@ids
            print ‘出货成功,剩余库存‘
            return @shuliang4+@numbers --返回值
            end
            else
            begin
            print ‘库存数量不足,现有库存‘
            return @shuliang4 --返回值
            end
        end
        else
        begin
        print ‘木有这种水果,木法出货‘
        end
    end
go

select*from Fruit
declare @a int --声明一个变量,来接收存储过程jinchuhuo的返回值
exec @a=jinchuhuo ‘k009‘,‘西瓜‘,‘3.7‘,‘青州‘,‘2‘,‘-100‘,‘image/7.gif‘ --输入参数
print @a --显示返回值

 
时间: 2024-12-18 02:04:51

SQL server 笔记7的相关文章

SQL Server笔记第一篇

SQL Server

SQL Server笔记1

数据库引擎是由SQL Server提供的核心服务,允许用户存储.检索.处理和保护数据安全. 数据库引擎服务 使用户能够构建高性能的联机事务处理应用系统和支持联机分析处理. 存储引擎 是SQL Server数据库的"灵魂",控制着数据在磁盘上的存储方式和数据被应用程序访问的方式. 数据库引擎是一个不会与用户直接交互的核心部件,它由一些至关重要的存储和管理数据的部件组成. 存储引擎管理着基于表和列数据类型定义的数据存储. 为了便于查询,使用索引. 使用分区,可以把大表和索引拆分到多个存储结

SQL Server笔记2

创建和管理架构 创建表 FILESTREAM.SPATIAL和DATE/TIME三种数据类型 创建计算列 定义约束,加强数据完整性 为压缩和稀疏行/列配置数据存储选项 任何数据库以及数据平台的目的 都是为了存储和管理数据. 对象的名称,即标识符. 有两种标识符:常规(regular)标识符和分隔(delimited)标识符. 标识符的规则: (1)最大128个字符 (2)第一个字符必须是字母 (3)不能是T-SQL的保留字 (4)不能包含空格或特殊字符 不符合标识符规则的对象名称 必须用引号"或

SQL server 笔记8

---分页查询 select top 2 *from student where sno not in (select top 2 sno from student) --not in() 屏蔽掉前两行 在此基础上再取前两行 --分页的存储过程 --直接用输入参数当作表名和列名,无法被识别,先用'++'拼接成字符串,然后用exec去执行,exec依然会把这个字符串当作语句执行 create proc fenye1 @nowye int ,--当前页 @number int,--显示行数 @tab

SQL server 笔记9(备份还原触发器事务三范式)

------备份还原 --右键数据库---任务 --备份:在不影响数据库正常运行的情况下,将数据备份到一个.bak结尾的文件夹 --还原:将bak文件还原到数据库 -----分离.附加 --分离:将数据库与数据库服务进行分离 --附加:将数据库mdf文件,附加到数据库服务上 --触发器:一种特殊的存储过程 特殊的地方在于,触发器是通过对数据库表的操作来引发 触发的动作只有‘增删改’ --存储过程是通过exec人为执行 create trigger student_insert --创建触发器 o

SQL Server 2012笔记分享-54:数据库文件管理1

(一)添加文件 可以在线执行,不影响数据库使用 ,如图. 添加完成后,如图所示. 也可以通过脚本的形式来添加,如图. (二)删除文件 可以在线执行,不影响数据库使用 . 只有当文件中的实际使用空间为空时才能被成功执行 . (三)移动文件到不同的磁盘路径下 必须先将数据库脱机,将导致数据库暂时不可用 详情参考:http://msdn.microsoft.com/zh-cn/library/ms345483.aspx 若要将移动数据或日志文件作为计划的重定位的一部分,请执行下列步骤: 1. 运行以下

SQL Server 2012笔记分享-46:如何快速学习T-SQL语句

对于初学者来说,T-SQL语句的编写一直是个难题,初学者还是习惯使用图形界面来做相关的SQL方面的维护工作.但是在一个稍微复杂大型的SQL场景中,如果我们能够快速的掌握和理解SQL语句的编写和使用,那么会使我们的运维工作达到事半功倍的效果. 其实对于SQL server 2012来说,本身就提供了很多途径来帮助初学者获取日常管理任务的对应T-SQL脚本.下面我们来举几个快速获取T-SQL脚本的例子. ================================================

SQL Server 2012笔记分享-38:了解系统数据库

master 数据库 记录 SQL Server 实例的所有系统级信息. master 数据库记录 SQL Server 系统的所有系统级信息.这包括实例范围的元数据(例如登录帐户).端点.链接服务器和系统配置设置.此外,master 数据库还记录了所有其他数据库的存在.数据库文件的位置以及 SQL Server 的初始化信息.因此,如果 master 数据库不可用,则 SQL Server 无法启动.在 SQL Server 中,系统对象不再存储在 master 数据库中,而是存储在 Reso

SQL Server 2012笔记分享-32:性能计数器监控SQL

需求 要求使用windows自带的性能监视器监控SQL的如下对象,并将结果保存便于日后分析. 性能对象:SQL Server databases,计数器:log file(s) size 和 datafile(s) size 性能对象:SQL Server:buffer manager,计数器:page reads/sec 性能对象:SQL Server:memory manager,计数器:total server memory(KB) ============================