如何动态生成SQL从4个CA_*_APPLE表查询对应ID列及指定列?
需求可行性及实现方案
这个需求完全可行,只需利用表名的命名规则直接拼接出对应ID列名即可——你的ID列是表名+_ID的格式,刚好可以复用TABLE_NAME字段构造ID列的引用。
原实现代码
Select ' Select AMOUT,RETAIL'+ ' from '+TABLE_SCHEMA+'.'+ table_name + ' Union All' From INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'CA_%_APPLE';
原生成结果
Select AMOUT,RETAIL from data.CA_2003_CA_APPLE Union All Select AMOUT,RETAIL from data.CA_2004_CA_APPLE Union All Select AMOUT,RETAIL from data.CA_2005_CA_APPLE Union All Select AMOUT,RETAIL from data.CA_2006_CA_APPLE Union All
修改后的实现代码
在SELECT列表中添加table_name + '_ID'即可生成对应ID列的引用:
Select ' Select '+ table_name + '_ID, AMOUT,RETAIL'+ ' from '+TABLE_SCHEMA+'.'+ table_name + ' Union All' From INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'CA_%_APPLE';
生成的目标结果
执行修改后的语句后,就能得到你期望的包含对应ID列的联合查询:
Select CA_2003_CA_APPLE_ID,AMOUT,RETAIL from data.CA_2003_CA_APPLE Union All Select CA_2004_CA_APPLE_ID,AMOUT,RETAIL from data.CA_2004_CA_APPLE Union All Select CA_2005_CA_APPLE_ID,AMOUT,RETAIL from data.CA_2005_CA_APPLE Union All Select CA_2006_CA_APPLE_ID,AMOUT,RETAIL from data.CA_2006_CA_APPLE Union All
补充说明
如果ID列命名规则有变动,或者需要严谨验证列的存在性,可以关联INFORMATION_SCHEMA.COLUMNS表筛选每个表的ID列,但根据你描述的规则,直接拼接表名的方式已经足够简洁可靠。
内容的提问来源于stack exchange,提问作者Novice_Techie
相关产品推荐
相关产品推荐

