数据库里每月生成一张表,比如TABLE201401/TABLE201402/TABLE201403.......TABLE201411,前面的字符串都一样,只是后面是变化的,用年度和月份来表示,下个月了就是TABLE201412,我想把数据库里所有的表的数据全部调出来,知道用union all,但不知道如何写动态语句,求教各位了,谢谢!
------解决思路----------------------
DECLARE @sql varchar(max)
SET @sql = ''
SELECT @sql = @sql + 'UNION ALL
SELECT * FROM '+name+'
'
FROM sys.objects
WHERE type='U'
AND name LIKE 'TABLE20%' --应没有2000年之前的表吧
--SELECT CHARINDEX('SELECT',@SQL)
SET @sql = STUFF(@sql,1,11,'')
--PRINT @sql
EXEC(@sql)
------解决思路----------------------
DECLARE @SQL VARCHAR(MAX)LIKE'TABLE20%'是条件,如果不够严格,你可以根据自己的需要调整
SET @SQL=''
SELECT @SQL=@SQL+'UNION ALL SELECT * FROM['+[name]+']' FROM SYS.SYSOBJECTS WHERE type='U'AND [name]LIKE'TABLE20%'
SET @SQL=STUFF(@SQL,1,10,'')
EXEC(@SQL)