将表名从表列表传递给SELECT查询

时间:2017-12-04 16:13:21

标签: sql-server

我的组织很快将每月收到不同数量的数据集,我们的数据服务团队将每个数据集加载到他们自己的表中,即提交的47个文件,数据库中的47个表。不是一个漂亮的方法,但它会及时改进。提交的年份和月份是表名的一部分。即CMorgNZ322_200701PLD ...... NZ322_200701是表名的可变部分; NZ322X是数据的来源,200701是2007年4月(基于财政年度)

我不想成为编辑SELECT查询的奴隶,只是为了月修改表名,所以我想编写一个存储过程,将表名从一个SELECT查询传递给第二个SELECT查询

这是我第一次尝试使用LOOPS,所以我想知道什么是最好的方法,如何将表名从初始SELECT查询传递到第二个SELECT查询

DECLARE cur_filestoprocess 
DECLARE @vcYrMth VarChar(6)
SET @vcYrMth = ‘200701’

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE ‘CMOrg%’ + @vcYrMth + ‘PLD’;

SELECT  COLa,
        COLb,
        COLc,
        COLd,
        SUM(COLg) AS ‘Activity’,
        SUM(COLk) AS ‘Costs’
INTO    RegionABC200701Summary
FROM  tablename1
GROUP BY COLa,
         COLb,
         COLc,
         COLd

提前,谢谢你的帮助...... ..

1 个答案:

答案 0 :(得分:0)

使用动态SQL这可能不是最优雅但你应该明白

SELECT @tableName = TABLE_NAME
FROM #tmp
ORDER BY TABLE_NAME OFFSET @rowNum ROWS
FETCH NEXT 1 ROWS ONLY

<强>被修改 以上内容仅适用于SQL 2012及更高版本,如果使用以下版本

,请使用此代码段

替换

SELECT @tableName = TABLE_NAME
FROM (
    SELECT TABLE_NAME, ROW_NUMBER() OVER (ORDER BY TABLE_NAME) AS RowNumber
    FROM #tmp
    ) a
WHERE RowNumber = @rowNum

使用

startDateTime:Date  // showing the day and the starting hour
duration:number // showing the slot duration