一个功能页面,存在多个非必输查询栏位,则对应存储过程中,如何处理这部分变量条件,以保证查询的效能?
以下写法是否可行?
1 SELECT 2 * 3 FROM dbo.MRO_JobPRRecord PR 4 LEFT JOIN dbo.MRO_JobPRDetailRecord PRD ON PR.PRSN = PRD.PRSN 5 LEFT JOIN dbo.MRO_JobStatusQty SQ ON PRD.PRSN = SQ.PRSN AND PRD.PRItem = SQ.PRItem 6 LEFT JOIN dbo.MRO_JobPRItemStatus PRIS ON SQ.PRSN = PRIS.PRSN AND SQ.PRItem = PRIS.PRItem 7 WHERE PR.AreaID =@AreaID 8 AND PR.FactoryCode =@FactoryCode 9 AND PR.CompanyNo =@CompanyNo 10 AND (@PRNO='' OR PR.PRNo = @PRNO) 11
可以将where条件做为参数, 传进过程, 在存储过程里面拼接sql语句。
但是要注意‘’号问题。
存储过程用if判断啊,为空则省略掉对应的条件
.net4.0已支持参数默认值
就如你最后一个条件
(@PRNO='' OR PR.PRNo = @PRNO)
(@PRNO is null or PR>PRNo = @PRNO)