一个复杂的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: <Author,,Name>

-- Create date: <Create Date,,>

-- Description: <Description,,>

-- =============================================

ALTER PROCEDURE [dbo].[sp_FactoryAllocationFind]

--[业务日期]

@btime datetime,

@etime datetime,

--[调出工厂]

@warehouseOut varchar(50),

--[调入工厂]

@warehouseIn varchar(50),

--[调拨单号]

@sn varchar(50),

--[调拨入库单号]

@snIn varchar(50),

--[调拨取消单号]

@snCancel varchar(50),

--[说明]

@remark varchar(200),

--[包裹信息]

@package varchar(200),

--[状态]

@status varchar(50),

--[审批状态]

@auditStatus varchar(50),

--[在途未处理]

@intransit bit

AS

BEGIN

declare @sqltable table(F_SN varchar(50))   --这个用了临时表

if(@snIn IS NOT NULL) or (@intransit IS NOT NULL)

insert into @sqltable(F_SN)(select F_AllocationSN from dbo.T_Warehouse_FactoryAllocationIn

where F_SN = @snIn or F_InTransitStatus = @intransit)   --临时表的存储

else if(@snCancel IS NOT NULL)

insert into @sqltable(F_SN)(select F_AllocationSN from dbo.T_Warehouse_FactoryAllocationCancel

where F_SN = @snCancel)

else if(@package IS NOT NULL)

insert into @sqltable(F_SN)(select F_SN from dbo.T_Warehouse_FactoryAllocation

where F_ID = (

select F_AllocationID from dbo.T_Warehouse_FactoryAllocationDetail

where CHARINDEX(@package,F_Version)>0 or CHARINDEX(@package,F_PackageBarcode)>0 or CHARINDEX(@package,F_ProductName)>0))

else

insert into @sqltable(F_SN)(select F_SN from dbo.T_Warehouse_FactoryAllocation

where (ISNULL(@btime,‘‘)=‘‘ or  F_ServiceTime>[email protected])

and (ISNULL(@etime,‘‘)=‘‘ or  F_ServiceTime< DATEADD(dd,1,@etime))

and (ISNULL(@warehouseOut,‘‘)=‘‘ or  CHARINDEX(@warehouseOut, F_OutFactoryName)>0)

and (ISNULL(@warehouseIn,‘‘)=‘‘ or  CHARINDEX(@warehouseIn, F_InFactoryName)>0)

and (ISNULL(@sn,‘‘)=‘‘ or  CHARINDEX(@sn,F_SN)>0)

and (ISNULL(@remark,‘‘)=‘‘ or  CHARINDEX(@remark,F_Remark)>0)

and (ISNULL(@status,‘‘)=‘‘ or  CHARINDEX(@status,F_Status)>0)

and (ISNULL(@auditStatus,‘‘)=‘‘ or  CHARINDEX(@auditStatus,F_Status)>0))

select *

from(

select F_ID as ID, ‘调出‘ as 类型, F_SN as 调拨单号, F_SN as 单号, F_ServiceTime as 业务日期, F_OutFactoryName as 调出工厂, F_OutWarehouseName as 调出仓库,

F_InFactoryName as 调入工厂,F_InWarehouseName as 调入仓库, F_CreationTime as 创建时间, F_Creator as 创建人, F_Status as 状态,

F_AuditStatus as 审批状态

from dbo.T_Warehouse_FactoryAllocation

union

select F_ID as ID, ‘调入‘ as 类型, F_AllocationSN as 调拨单号,  F_SN as 单号, F_ServiceTime as 业务日期, ‘‘ as 调出工厂, ‘‘ as 调出仓库,

‘‘ as 调入工厂,‘‘ as 调入仓库, F_CreationTime as 创建时间, F_Creator as 创建人, F_Status as 状态,

F_AuditStatus as 审批状态

from dbo.T_Warehouse_FactoryAllocationIn

union

select F_ID as ID, ‘取消‘ as 类型, F_AllocationSN as 调拨单号, F_SN as 单号, F_ServiceTime as 业务日期, ‘‘ as 调出工厂, ‘‘ as 调出仓库,

‘‘ as 调入工厂,‘‘ as 调入仓库, F_CreationTime as 创建时间, F_Creator as 创建人, F_Status as 状态,

F_AuditStatus as 审批状态

from dbo.T_Warehouse_FactoryAllocationCancel

) as t

where t.调拨单号= ANY(select * from @sqltable)  --临时表的使用

order by t.调拨单号,t.类型

END

时间: 2024-10-21 07:19:29

一个复杂的SQL存储过程例子的相关文章

sql 存储过程例子和学习demo

-------------------------------------------------------------------------- -------------------------------存储过程Study------------------------------ -------------------------------------------------------------------------- --删除表 drop table student go -

sql存储过程几个简单例子

导读:sql存储是数据库操作过程中比较重要的一个环节,对于一些初学者来说也是比较抽象难理解的,本文我将通过几个实例来解析数据库中的sql存储过程,这样就将抽象的事物形象化,比较容易理解. 例1: create proc proc_stu @sname varchar(20), @pwd varchar(20) as select * from ren where [email protected] and [email protected] go 查看结果:proc_stu 'admin','a

SQL存储过程和函数

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

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

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

PL/SQL存储过程编程

/**author huangchaobiao *Email:[email protected] */ PL/SQL存储过程编程(上) 1. Oracle应用编辑方法概览 答:1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用; 2) ODBC 3) OCI: C语言和数据库打交道的方法,和ProC很相似,更底层,很少用; 4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多; 5) JDBC 6) PL/SQL: 存储在数据内运行, 其他

sql存储过程和事务的应用

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

转载 sql 存储过程与函数区别

SQL Server用户自定义函数和存储过程有类似的功能,都可以创建捆绑SQL语句,存储在server中供以后使用.这样能够极大地提高工作效率,通过以下的各种做法可以减少编程所需的时间: 重复使用编程代码,减少编程开发时间. 隐藏SQL细节,把SQL繁琐的工作留给数据库开发人员,而程序开发员则集中处理高级编程语言. 维修集中化,可以在一个地方做业务上的逻辑修改,然后让这些修改自动应用到所有相关程序中. 乍看之下,用户自定义函数和存储过程的功能似乎一摸一样.但是,其实这两者之间还有一些虽然细微但是

SQL存储过程实例详解

SQL存储过程实例详解 本文用3个题目,从建立数据库到创建存储过程,详细讲解数据库的功能. 题目1 学校图书馆借书信息管理系统建立三个表: 学生信息表:student 字段名称 数据类型 说明 stuID char(10) 学生编号,主键 stuName Varchar(10) 学生名称 major Varchar(50) 专业 图书表:book 字段名称 数据类型 说明 stuID char(10) 学生编号,主键 stuName Varchar(10) 学生名称 major Varchar(

sql全文检索例子

sql 中contains的使用例子,参数详解 全文索引——CONTAINS 语法 我们通常在 WHERE 子句中使用 CONTAINS ,就象这样:SELECT * FROM table_name WHERE CONTAINS(fullText_column,'search contents'). 我们通过例子来学习,假设有表 students,其中的 address 是全文本检索的列. 1. 查询住址在北京的学生 SELECT student_id,student_name FROM stu