SQL Server 第四堂课,创建存储过程。存储过程是一组编译在单个执行计划中的transact-SQL语句。存储过程相当于C#函数,可以允许模块化程序设计,允许更快执行如果某操作需要大量transct-SQL代码或需要重复执行,将在创建存储过程中对其进行分析和优化。

select *from fruit

use shuiguo 

--存储过程格式

create proc 存储过程名

--输入参数:当调用存储过程时,所需要输入的数据

--输出参数:从存储过程中赋值后带出数据

as

    --存储过程内容

    return 返回值

go

exec 返回值=存储过程名 参数一,参数二,....参数N



--进销存存储过程

alter proc Jinchuhuo   --定义函数名,相当于C#语言里的 public int 函数名

@ids varchar(50),      --定义变量,需要输入参数

@name varchar(50),

@price decimal(8,2),

@source varchar(50),

@stack varchar(50),

@numbers int,--输入正数代表进货,输入负数代表出货

@image varchar(50)

as

    if @numbers>0 --这代表进货

    begin 

        --先查询是否有这种货

        declare @shiok int       --定义新变量

        select @shiok=COUNT(*) from Fruit where Ids = @ids  --输入水果编号的参数,查询水果表里是否有这个编号,然后把查询值赋给变量

        if @shiok>0--有这种货,那就直接改库存

        begin

            update Fruit set Numbers=Numbers+@numbers where Ids=@ids   --把输入的参数@numbers加上水果表里的原来numbers

            return 2 -- 加库存成功

        end

        else--没有这种货,新增到数据库表中

        begin

            insert into Fruit values(@ids,@name,@price,@source,@stack,@numbers,@image)

            return 3--新增数据成功

        end

    end

    else--出货

    begin

        declare @isok int --定义新变量,用来接收根据输入编号查询到的信息数量

        select @isok=COUNT(*) from Fruit where Ids = @ids

        if @isok>0--说明有我们要出货的产品

        begin

            declare @kcnum int --用来接收库存数量

            select @kcnum=numbers from Fruit where Ids=@ids  --把查询出来的水果的numbers赋给@kcnum

            if @kcnum>=abs(@numbers) -- 够出货的,要修改数据库   --@kcnom 数量大于输入的参数数量

            begin

                update Fruit set Numbers=@kcnum+@numbers where Ids=@ids -- 修改库存--出货后修改库存

                return 1 -- 出货成功

            end

            else

            begin

                return -2 --有货但不足

            end

        end

        else--没有要出货的产品,直接返回0

        begin

            return -1 -- 没有这个货

        end

    end

go



declare @a int   --定义新变量接受jinchuhuo里的函数

exec @a = jinchuhuo 'k006','蟠桃',99,'沂源',1,50,'image/4.gif'   --输入参数带入存储过程执行,相当于C#函数

print @a   --输出最终结果

 

  一个需要数百行代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码,可作为安全机制使用。

你可能感兴趣的:(SQL Server)