日期:2014-05-17  浏览次数:20665 次

动态sql增强问题
以下为相关表以及sp:
 Create table Table_3 (id int, date1 date, score int)
insert into table_3 select 1, '2013-09-01',1 union all select 2,'2013-09-02',2
union all select 3 ,'2013-09-02', 2 union all select 4,'2013-09-02', 2 union all select 5,'2013-09-03', 3  union all select 6,'2013-09-03', 4
go

create proc usp_test @TableName varchar(100), @field varchar(50), @filter varchar(300), @func varchar(10)
as
begin
Declare @sql nvarchar(max)
declare @filterSql varchar(200)

if(@filter !='')
begin
set @filterSql = ' and '+@filter
end

set @sql = 'select '+ @field+','+@func + '(score) from '+ @TableName + ' where 1=1 ' + @filterSql + ' group by '+@field
exec sp_executesql @sql
End
go
usp_test 'Table_3','date1', 'Convert(date, Date1) =''2013-09-02''','sum' 

以前的输入参数,第3个参数输入为常量'2013-09-02',如 Convert(date, Date1) ='2013-09-02',现在添加功能为此sp还要识别嵌套函数比如Convert(date, Date1) =Maximum(date1), 或Convert(date, Date1) =Maximum() 注意不只限于Max,可能为min 等其他聚合函数,在保留原功能基础上,请问如何修改呢?
即现在要支持的4种功能
usp_test 'Table_3','date1', 'Convert(date, Date1) =''2013-09-02''','sum'
usp_test 'Table_3','date1', 'Convert(date, Date1) =Maximum(date1)','sum'  
usp_test 'Table_3','date1', 'Convert(date, Date1) =Max()' ,'sum'
usp_test 'Table_3','date1', 'Minimum(date1) =Convert(date, Date1)' ,'sum' --参数颠倒顺序
谢谢!

------解决方案--------------------

usp_test 'Table_3','date1', 'Convert(date, Date1) =(select MAX(Date1) from Table_3)','sum'  

------解决方案--------------------

use test
 Create table Table_3 (id int, date1 datetime, score int)
insert into table_3 select 1, '2013-09-01',1