SQL 存储过程参数解决方案
来源:互联网 发布:ios 仿淘宝搜索功能 编辑:程序博客网 时间:2024/05/17 06:48
今天做这个一个问题,需要动态使用Sql语句,原来的解决方案是在程序中是用
if () {} else{}语句来解决
后来因为数据问题,没办法只有使用存储过程。
源代码是这样的
这个存储过程是对的,但是里面有5个参数,但是在程序中除了时间外的另外三个参数都有可能为空,而且在为空的情况下需要能够检索查询出所有信息!
一时间真有点为难!
好在天无绝人之路,方法竟然找到了:
同样的Sql语句,做了小小的修改
--exec sp_SupplyIntoStock '2007-03-01','2009-05-31','','',''
CREATE PROCEDURE [dbo].[sp_SupplyIntoStock]
@StartDate VARCHAR(50), --开始时间
@EndDate VARCHAR(50), --结束时间
@MFK_Big VARCHAR(50),--商品大类
@MFK_Small VARCHAR(50),--商品小类
@S_Name VARCHAR(50) --供应商名称
AS
BEGIN
create table #Temp1
(
S_Name VARCHAR(50),
MFK_Big VARCHAR(50),
MFK_Small VARCHAR(50),
IntoMoney decimal(18,4)
)
create table #Temp2
(
S_Name VARCHAR(50),
MFK_Big VARCHAR(50),
MFK_Small VARCHAR(50),
UG_IntoMoney decimal(18,4)
)
--供应商入库信息
INSERT INTO #Temp1(S_Name,MFK_Big,MFK_Small,IntoMoney)
SELECT dbo.Supply.Cdesc AS S_Name, dbo.MerchandiseBig.CDesc AS MFK_Big, dbo.MerchandiseSmall.CDesc AS MFK_Small,
CONVERT(numeric(20, 2), SUM(dbo.Stock_IntoStockList.Into_Num * dbo.Stock_IntoStockList.Into_Price)) AS IntoMoney
FROM dbo.Stock_IntoStock INNER JOIN
dbo.Stock_IntoStockList ON dbo.Stock_IntoStock.Into_Code = dbo.Stock_IntoStockList.Into_Code INNER JOIN
dbo.MerchandiseBig INNER JOIN
dbo.Merchandise ON dbo.MerchandiseBig.MBCode = dbo.Merchandise.MFK_Big ON
dbo.Stock_IntoStockList.M_Code = dbo.Merchandise.CreateCode INNER JOIN
dbo.MerchandiseSmall ON dbo.Merchandise.MFK_Small = dbo.MerchandiseSmall.MSCode INNER JOIN
dbo.Supply ON dbo.Stock_IntoStock.Supply_Code = dbo.Supply.SCode
WHERE (dbo.Stock_IntoStockList.Into_Status = 'C')
and dbo.Stock_IntoStockList.Update_Date >= @StartDate
and dbo.Stock_IntoStockList.Update_Date <= @EndDate
and (dbo.MerchandiseBig.CDesc = @MFK_Big or @MFK_Big ='')
and (dbo.MerchandiseSmall.CDesc = @MFK_Small or @MFK_Small='' )
and (dbo.Supply.Cdesc = @S_Name or @S_Name='')
GROUP BY dbo.Supply.Cdesc, dbo.MerchandiseBig.CDesc, dbo.MerchandiseSmall.CDesc
ORDER BY dbo.Supply.Cdesc
--供应商退货信息
INSERT INTO #Temp2(S_Name,MFK_Big,MFK_Small,UG_IntoMoney)
SELECT dbo.Supply.Cdesc AS S_Name, dbo.MerchandiseBig.CDesc AS MFK_Big,dbo.MerchandiseSmall.CDesc AS MFK_Small,
CONVERT(numeric(20, 2), SUM(ISNULL(dbo.Stock_UntreadGoodsList.UG_Num * dbo.Stock_UntreadGoodsList.UG_Price, 0))) AS UG_IntoMoney
FROM dbo.Supply INNER JOIN
dbo.Stock_UntreadGoodsList INNER JOIN
dbo.Stock_UntreadGoods ON dbo.Stock_UntreadGoodsList.UG_Code = dbo.Stock_UntreadGoods.UG_Code ON
dbo.Supply.SCode = dbo.Stock_UntreadGoods.Supply_Code RIGHT OUTER JOIN
dbo.MerchandiseSmall INNER JOIN
dbo.MerchandiseBig INNER JOIN
dbo.Merchandise ON dbo.MerchandiseBig.MBCode = dbo.Merchandise.MFK_Big ON
dbo.MerchandiseSmall.MSCode = dbo.Merchandise.MFK_Small ON dbo.Stock_UntreadGoodsList.M_Code = dbo.Merchandise.CreateCode
WHERE (dbo.Stock_UntreadGoodsList.UG_Status = 'C')
and dbo.Stock_UntreadGoodsList.Update_Date >= @StartDate
and dbo.Stock_UntreadGoodsList.Update_Date <= @EndDate
and (dbo.MerchandiseBig.CDesc = @MFK_Big or @MFK_Big ='')
and (dbo.MerchandiseSmall.CDesc = @MFK_Small or @MFK_Small='' )
and (dbo.Supply.Cdesc = @S_Name or @S_Name='')
GROUP BY dbo.Supply.Cdesc, dbo.MerchandiseBig.CDesc, dbo.MerchandiseSmall.CDesc
ORDER BY dbo.Supply.Cdesc
select T1.S_Name,T1.MFK_Big, T1.MFK_Small,
CONVERT(NUMERIC(20,2),T1.IntoMoney - isnull (T2.UG_IntoMoney,0)) AS IntoMoney
from #Temp1 AS T1
left outer JOIN #Temp2 AS T2 ON T2.S_Name = T1.S_Name
END
GO
问题解决了!
- SQL 存储过程参数解决方案
- SQL存储过程参数问题
- Sql 存储过程传递参数
- SQL Server存储过程和参数示例
- SQL Server存储过程和参数示例
- SQL Server存储过程和参数示例
- SQL读取存储过程返回的参数
- sql:存储过程,事务,out参数
- Java调用SQL存储过程 输入输出参数
- 存储过程中执行参数SQL语句
- SQL Server 存储过程的创建参数
- SQL Server存储过程数组参数
- Java调用SQL存储过程 输入输出参数
- SQL SERVER存储过程,参数默认值设置
- SQL SERVER中存储过程参数问题
- sql server 2008存储过程参数
- SQL Server存储过程数组参数
- Sql Server 存储过程可选参数
- HTML中的ID和Name有什么区别???(转载)
- Symbian应用程序常用架构
- Linux配置WWW服务器全攻略 ( apache )
- 将销售订单中docType改成下拉列表的方法
- SQL Server 2008 下的备份和日志收缩
- SQL 存储过程参数解决方案
- 秀一下我的vim
- webservices的配置文件中标签的nillable属性
- window.open设置title问题
- 短信骚扰
- Oracle存储过程读写文件 UTL_FILE
- CListControl查找
- MyEclipse 开发 SSH 整合时 java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit 解决方案
- Mysql manual -- update