SQL SERVER存储过程中怎么循环查询不同的表并把各表查询结果联合起来

SQL SERVER存储过程中如何循环查询不同的表并把各表查询结果联合起来?
大家好!
我的SQL SERVER数据库中员工考勤打卡记录被分月存储在不同的表中,表名为:考勤记录表201405、考勤记录表201404 ............
目前存储过程思路如下:
ALTER PROCEDURE [dbo].[Z02]
     @GH char(12),@TIME CHAR(10)
AS
SELECT distinct  A.bh AS 工号,A.xm AS 姓名 ,B.KDateTime AS 刷卡时间,C.ID AS 刷卡类别 FROM 考勤记录表201405 ......
Union 
SELECT  A.bh AS 工号,A.xm AS 姓名 ,B.KDateTime AS 刷卡时间,C.ID AS 刷卡类别 FROM 考勤记录表201404 ......
Union 
SELECT...... FROM 考勤记录表201403 ......
ORDER BY 工号,刷卡时间 
客户端程序中调用以上存储过程,可以顺利从SQL SERVER数据库的考勤记录201405、考勤记录201404 、考勤记录201403三个表中取得打卡记录。
但是对于分月存储的考勤记录,我不希望在上述存储过程中无限的继续罗列其它月份的UNION  SELECT 语句,请问在存储过程中如何循环获取不同表的考勤记录?以及某月考勤记录表是否存在的循环终止条件判断?

恳请各位高手指点,感激不尽!
------解决方案--------------------
declare @str varchar(max)
set @str=''
select  @str=@str+'select  * from '+name+';'+char(10)+'union all'+CHAR(10) from sys.tables
where name like '考勤记录表%'
--print @str
exec(@str)

------解决方案--------------------
试试这个:
declare @str varchar(max)
set @str=''
select  @str=@str+'select  * from '+QUOTENAME(name)+';'+char(10)+'union all'+CHAR(10) from sys.tables
where name like '考勤记录表%'
--print @str
exec(@str)