用动态sql即可实现。
如student表中有如下内容:
现在查询条件不定,但只能是一个字段,如:可能会查sex为男的人,可能会查name为张三的人。可以这样写一个简单的存储过程。
declare @col varchar(20)declare @sql varchar(2000)declare @str varchar(20)set @col='sex'set @str='男'set @sql='select * from student where '+@col+'='''+@str+''''exec (@sql)结果就是这样的:
大概逻辑如下,如果要具体代码可以追问@date1='2013-02-01'
@date2='3013-07-26'
第一步,判断@date1<@date2,如果为假返回空
第二步,根据@date1来获取要查询的当前表名
第三步,使用while循环,每次将@date1加一个月,得出所有需要查询的表名
第四步,循环的判断条件,是加了N个月以后的@date1的最后一天小于等于@date2才继续循环,否则退出循环。
第五步,将查询到的数据返回。
附:第二步到第四步,可以是动态构建SQL语句的方法,在最后一步的时候才查询出来;
也可以是先声明一个临时表,第二步到第四步的时候,都查询数据并插入到临时表中,最后查询临时表。
难点在于如何动态生成每月的日期数据,使用以下语句可以生成每月日期数据,然后再关联需要显示的其他数据。
生成每月动态数据代码:
declare @BeginMonth as Varchar(7) --需要生成的年份和月份,例如:2015-01set @BeginMonth='2015-03'
select top(datediff(d,@BeginMonth+'-01',dateadd(m,1,@BeginMonth+'-01'))) @BeginMonth+'-'+cast((row_number() over(order by a.object_id)) as varchar(2)) as ID from sys.all_columns a,sys.all_columns b
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)