当前位置: 代码迷 >> Sql Server >> 存储过程多参数动态查询怎么写 新手
  详细解决方案

存储过程多参数动态查询怎么写 新手

热度:52   发布时间:2016-04-24 09:57:09.0
存储过程多参数动态查询如何写 新手求助
这是我的参数
alter procedure XSSCQKB--销售收款情况表
@startdate datetime,
@enddate datetime,
@fdeptid varchar,
@fempid varchar,
@fsupplyid varchar
as


这是我的查询语句
select * from (
select 
case when(GROUPING(部门)=1) then'总合计' else 部门 end 部门,
case when(GROUPING(业务员)=1) then'部门合计' else 业务员 end 业务员,
case when(GROUPING(单位名称)=1) then'业务员小计' else 单位名称 end 单位名称,
case when(GROUPING(终端客户)=1) then 终端客户 else 终端客户 end 终端客户,
sum(合同金额)合同金额,
sum(销售金额)销售金额,
sum(应收税额)应收税额,
sum(公司净收)公司净收,
sum(应付差价)应付差价,
sum(回款金额)回款金额,
sum(合同欠款)合同欠款,
sum(实际欠款)实际欠款
,case when GROUPING(部门)=1 then 101
when GROUPING(业务员)=1 then 102
when GROUPING(单位名称)=1 then 103
when GROUPING(终端客户)=1 then 104
else 105 end as id
from #XSSCQKB 
group by 部门,业务员,单位名称,终端客户 with rollup) a 
where a.id in('105','103','102','101')

麻烦大家帮忙看看 如果多参数动态查询 要如何写啊   写了点都不对呢
------解决思路----------------------
我给你一个每月自动生成日志表的动态sql你研究研究

------------------------------------------------------------------------------------------------------
declare @date char(6) --年月:201409
,@tablename varchar(35) --表名:tbl_handlelog201409
,@sql nvarchar(1000) --执行的SQL

select @date=convert(varchar(6),dateadd(m,1,getdate()),112)
,@tablename='dbo.tbl_handlelog_'+@date
,@sql=N'create table '+@tablename+'(
[id] [int] identity(1,1) not null,
[ikey] [varchar](100) not null default(''''),
[username] [varchar](50) not null default(''''),
[logtime] [datetime] not null default(getdate()),
[clientip] [varchar](50) not null default(''''),
[module] [varchar](255) not null default(''''),
[orderno] [varchar](50) not null default(''''),
[logtype] [varchar](100) not null default(''''),
[content] [varchar](max) not null default(''''),
[ServerIP] [varchar](25) not null default(''''),
constraint [pk_tbl_handlelog_'+@date+'] primary key clustered 
(
[logtime],
[id]
)with (data_compression=page)
)
'
exec sp_executesql @sql
--print @sql

------解决思路----------------------
引用:
忘贴了  
declare @s1 varchar(4000)

下面这个查询是带参数的 但是不对
set @s1='
select 
convert(varchar(11),日期,120)日期,部门,业务员,单位名称,合同金额,销售金额,
应收税额,公司净收,应付差价,回款金额,合同欠款,实际欠款,终端客户
from #XSSCQKB where 1=1'

if(ISNULL(@startdate,'')<>'')
set @s1=@s1+'and 日期>='+@startdate+''

if(@enddate<>'')
set @s1=@s1+'and 日期<='+@enddate+''

if(@fdeptid is not null)
set @s1=@s1+'and 部门 like''%'+@fdeptid+'%'''  
 
if(@fempid is not null)
set @s1=@s1+'and 业务员 like''%'+@fempid+'%'''
 
if(ISNULL(@fsupplyid,'')<>'')
set @s1=@s1+'and 单位名称 like''%'+@fsupplyid+'%'''

exec (@s1)


动态sql一定要注意空格。再执行一下看是否有错,另如果有错误,直接将sql字符串 print出来

set @s1='
select 
convert(varchar(11),日期,120)日期,部门,业务员,单位名称,合同金额,销售金额,
应收税额,公司净收,应付差价,回款金额,合同欠款,实际欠款,终端客户
from #XSSCQKB where 1=1'

if(ISNULL(@startdate,'')<>'')
set @s1=@s1+' and 日期>='''+@startdate+''''

if(@enddate<>'')
set @s1=@s1+' and 日期<='''+@enddate+''''

if(@fdeptid is not null)
set @s1=@s1+' and 部门 like ''%'+@fdeptid+'%'''  
 
if(@fempid is not null)
set @s1=@s1+' and 业务员 like ''%'+@fempid+'%'''
 
if(ISNULL(@fsupplyid,'')<>'')
set @s1=@s1+' and 单位名称 like ''%'+@fsupplyid+'%'''

exec (@s1)
  相关解决方案