一个内容丰富的存储过程

ALTER proc [dbo].[pro_inventory]--单据过账
@orderno nvarchar(50),
@inout int--加还是减库存 用1,-1标示
as
declare @errorcount int

select @errorcount=COUNT(1) from yw_order where [email protected] and ostate>0--只执行一次
if(@errorcount>0)
begin
RAISERROR(‘*此单据已经过账!‘,16,1)
return
end

 Set XAcT_ABORT ON --有错误马上回滚
   Begin Transaction T--开始事物

   select orderno,hid,cid,wid,cwid,wcode,wname,wguige,SUM(qty) as qty into #table0616 from yw_orderlist  where orderno=@orderno
   group by orderno,hid,cid,wid,cwid,wcode,wname,wguige

create table #table2054
(
    hid int,
    cid int,
    cangweiid int,
    materialid int,
    cqty int
)
--将原库存里面有的物料从list表里面摘出来
insert into #table2054(hid,cid,cangweiid,materialid,cqty)
    select t1.hid,t1.cid,t1.cangweiid,t1.matreialid,t2.qty from YW_Inventory t1
    inner join #table0616 t2 on t1.cangweiid=t2.cwid and t1.cid=t2.cid and t1.hid=t2.hid and t1.matreialid=t2.wid
    where t2.orderno=@orderno

--先更新已有的库存信息
update YW_Inventory set YW_Inventory.cqty=YW_Inventory.cqty+b.cqty*@inout from #table2054 b where
 YW_Inventory.cid=b.cid and YW_Inventory.hid=b.hid and yw_inventory.cangweiid=b.cangweiid and yw_inventory.matreialid=b.materialid 

select @errorcount = COUNT(1) from yw_inventory where cqty<0
if(@errorcount>0)
begin
Rollback Transaction T
RAISERROR(‘*系统不允许产生负库存,请核实‘,16,1)
return
end

--增加原来没有的-出库的地方 不会有insert的,有的话肯定有问题
insert into YW_Inventory(hid,cid,cangweiid,matreialid,cqty)
select t2.hid,t2.cid,t2.cwid,t2.wid,t2.qty*@inout
from #table0616 t2 where [email protected] and convert(varchar(10),t2.hid)+convert(varchar(10),t2.cid)+convert(varchar(10),t2.cwid)+convert(varchar(10),t2.wid) not in(select convert(varchar(10),hid)+convert(varchar(10),cid)+convert(varchar(10),cangweiid)+convert(varchar(10),materialid) from #table2054)

select @errorcount = COUNT(1) from yw_inventory where cqty<0
if(@errorcount>0)
begin
Rollback Transaction T
RAISERROR(‘*系统不允许产生负库存,请核实‘,16,1)
return
end
--更改单据状态
 UPDATE yw_order SET ostate = 1 where orderno=@orderno
 update jc_cangwei set cwstate=1 where cwid in (select yw_orderlist.cwid from yw_orderlist where orderno=@orderno)
COMMIT Transaction T--提交
return 1
时间: 2024-08-26 14:17:17

一个内容丰富的存储过程的相关文章

推荐一个内容滚动jquery插件

myslider是一个内容滚动jquery插件,版本0.1.2的每次滚动内容是一行内容,可以是文字,可以是一个链接,还可以是图片. 官方网址:http://keleyi.com/jq/myslider/ 参考:http://plugins.jquery.com/myslider/ 例子代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>myslider</title><base target=&

一个高效的分布存储过程(转)

最近在做一个几百万条数据的分页查询,研究了各种方案,在本机上用项目的实际数据库做测试,测试过程 is very 痛苦,不堪回首ing.现在废话不多说,直接上结果,相信这也是大多数搜索答案的人最愿意看的方式. 以下是存储过程的代码: create procedure [dbo].[P_GridViewPager]( @recordTotal  int ouput,       --输出记录总数 @viewName varchar(800),  --表名 @fieldName varchar (80

创建一个内容提供者Creating a Content Provider——翻译总结自developer.android.com

前言 content provider提供了一种访问结构化数据的方式.他通过封装数据进行安全的数据访问.content provider是跨进程访问数据的标准接口. 当你想访问content Provider的数据的时候,使用Context对象中的ContentResolver对象.这个对象和content provider的一个对象进行交互.provider对象接收客户端的查询等请求,并返回结果. 如果你的应用不需要和其他的应用共享数据,那么可以不必开发content provider.但你你

数据库基础_JDBC[5]_Dbutil以及一个简单的数据库存储过程

DButil 1.什么是DButil commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc 编码的工作量,同时也不会影响程序的性能 2.DButil常用的方法以及功能 DbUtils :提供如关闭连接.装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的.主要方法如下: (1).public static void close(-) throws java.sql.SQ

AJAX分页 (内容涉及到 存储过程)

<1> 首先我们在数据库(SQL Server)中声明定义存储过程 use sales if(exists(select * from sys.objects where name='proc_location_Paging')) drop proc proc_location_Paging go create proc proc_location_Paging --创建存储过程 ( @pageSize int, --页大小 @currentpage int, --当前页 @rowCount

创建一个公共查询的存储过程

ALTER PROCEDURE [dbo].[sp_CommSelect]@ParamName VARCHAR(2000),/*查询字段字符串*/@TableName VARCHAR(2000),/*表名*/@ParamWhere NVARCHAR(2000)/*条件字符串*/AS BEGINDECLARE @Sql VARCHAR(5000) set @Sql='select '[email protected]+' from '[email protected]+' where 1=1 an

一个复杂的SQL存储过程例子

USE [DB_YH_ERP_GW_V2_NewReq] GO /****** Object:  StoredProcedure [dbo].[sp_FactoryAllocationFind]    Script Date: 05/09/2016 08:45:52 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author:

linux中合并多个文件内容到一个文件的例子

尊敬的用户您好,从即日起 导入 及 导出 功能已经下线,请到阿里云官方数据库管理平台 iDB Cloud 使用该功能! 继续在 iDB Cloud 中发现导出的数据库文件是按照每个表生成的SQL文件,这么多单独的文件再导入到其他数据库中是个麻烦事,需要将所有的SQL文件合并为一个完整的SQL文件.有了这个思路,决定寻找方法来实现. Windows 中实现合并多个文件内容到一个文件中 代码如下 复制代码 (www.111cn.net)copy *.sql MERGE.sql Linux 或 类Un

从头开始编写一个Orchard网上商店模块(5) - 创建和渲染ProductCatalog的内容类型

原文地址: http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-part-5创建和渲染ProductCatalog的内容类型 这是从头开始编写一个新的Orchard模块的教程的第5篇.对于本教程的概述,请参阅介绍. 为了网站的访问者能够将产品添加到他们的购物车,我们需要一个产品目录.产品目录可以是一个简单的产品清单.然而,在本教程中,我们希望主题作者能够接管渲染(r