create proc Orders
@ship varchar(100),
@company varchar(100),
@trade varchar(100),
@starttime datetime ,
@endtime datetime
as
(???????)
go
(这个表的查询是:select * from All_Orders)
@ship 、 @company 、@trade 、 @starttime 、 @endtime
这五个变量是传递过来的 查询条件
5个查询条件 是交互的, 也就是说 不知道用户传递过来的是哪个条件,
怎么来进行查询呢?
请求 各路漂浮的同事们~
------最佳解决方案--------------------
试试:
if @starttime is null
select * from All_orders where ship=isnull(@ship,ship)
and company=isnull(@company,company) and trade=isnull(@trade,trade)
if @starttime is null
select * from All_orders where ship=isnull(@ship,ship)
and company=isnull(@company,company) and trade=isnull(@trade,trade) and orders_datetime
between @starttime and @endtime
看上去没啥问题啊
------其他解决方案--------------------
create proc Orders
@ship varchar(100)=null,
@company varchar(100)=null,
@trade varchar(100)=null,
@starttime datetime =null,
@endtime datetime=null
as
select * from All_Orders where ship=isnull(@ship,ship) and company=isnull(@company,company) and trade=isnull(@trade,trade) and starttime=isnull( @starttime,starttime)and endtime=isnull( @endtime ,endtime)
go
------其他解决方案--------------------
以前经常有if判断然后动态拼接的。
现在发哥这种就可以了,用isnull判断一下,为null的就不用处理了。
当然这样的话,如果没有传这个条件,而数据中又是null值的数据是取不出来的。
------其他解决方案--------------------
这里面的@starttime 、@endtime 应该是 orders_datetime between @starttime and @endtime
查询两个时间段时间的数据
请问 应该怎么来写呢?
------其他解决方案--------------------
就性能来说,用if拼接后用 sp_executesql 将可重用计划缓冲,而且计划的选择也较好
------其他解决方案--------------------
我的写法有一定的限制,但是想了一下那5个if/else有点变态......而且这个也是我以前做开发时候用过的,当然记住,有适用场合,不是说通用。
------其他解决方案--------------------
现在还用不?
------其他解决方案--------------------
现在不做开发了。。。。
------其他解决方案--------------------