存储过程与参数的问题
本人新建的存储过程,create procedure so_momo
@csocode nchar(20) ,
@cinvcode nchar(20)
as
SELECTDISTINCT
SO_SODetails.cSOCode AS 销售订单号, SO_SODetails.cInvCode AS 存货编码,
so_somain.ccusname as 客户 ,SO_SODetails.iQuantity AS 销售订单数量,
mom_order.MoCode AS 生产订单号, mom_orderdetail.Qty AS 生产数量, mom_morder.DueDate AS 生产完工日期
FROM SO_SODetails INNER JOIN
SO_SOMain ON SO_SODetails.ID = SO_SOMain.ID LEFT OUTER JOIN
mom_morder INNER JOIN
mom_orderdetail ON mom_morder.MoDId = mom_orderdetail.MoDId INNER JOIN
mom_order ON mom_orderdetail.MoId = mom_order.MoId ON SO_SODetails.cSOCode = mom_orderdetail.OrderCode AND
SO_SODetails.iRowNo = mom_orderdetail.OrderSeq
where so_sodetails.csocode = @csocode and so_sodetails.cinvcode = @cinvcode
ORDER BY 销售订单号
go
我想,如果我不带参数查询
exec so_momo 可以查出所有的行
如果带参数查询
exec so_momo '011005003', 'cbswi-jca0089a' 也就只可以查到指定的这一行
现在这个存储过程达不到这个效果,只能查带参数的,查不到所有, :o,初学者,根本看不明白,学习几天在回来看吧 回帖,拿分{:soso_e127:} 同意6楼,学习中 回复 1# songburong
怎么没有人顶哈, 学习中,顶一下1 感觉就是有问题。
1、不带参数时, @csocode@cinvcode为空的话,这个条件就没有办法成立了。
2、另外带参的存储过程,是不是应该设置个默认值啊? create procedure so_momo
@csocode nchar(20)= '' ,
@cinvcode nchar(20)= 'ZZZZZZ'
as 可以设置判断条件,so_sodetails.csocode = @csocode and so_sodetails.cinvcode = @cinvcode
declare @条件1 varchar(60)
declare @条件2 varchar(60)
if @csocode =‘’
select@条件1 = ‘and so_sodetails.csocode =‘ @csocode
else
select@条件1 = ’‘
同样设置条件2 然后where条件改为 where 1=1 +@条件1 + @条件2 要是用UAP做报表的话,就可以设置@filterstring nvarchar(1000) =N'',然后在UAP设置相关条件即可 sqlserver的存储过程参数可以有默认值的,
可以设为空(不是null) 本人支持6楼那样做,这个问题不复杂,容易实现! 6楼 有点复杂 http://www.zcufida.com 学习了!!!!! if @csocode = '' set@csocode = '%'
else
set @csocode = @csocode + '%'
页:
[1]
2