如何基于log_list的table_id和field_id关联sys.columns查询field_name?
获取field_name的SQL查询方案
没问题,我来帮你搞定这个需求。核心就是利用sys.columns系统视图关联出字段名,我会结合你现有的查询语句调整,让逻辑更清晰:
首先,sys.columns存储了数据库中所有表的字段信息,关键关联点是:
object_id:对应表的唯一标识(可以通过表名用OBJECT_ID()函数获取)column_id:对应字段在表中的ID,正好匹配你log_list里的field_id
基于你的现有语句,调整后的完整SQL如下:
SELECT ll.date, ll.table_id, tnl.name AS table_name, sc.name AS field_name FROM log_list ll JOIN table_name_list tnl ON ll.table_id = tnl.table_id AND ll.company_name LIKE '%something%' JOIN sys.columns sc -- 通过表名获取对应表的object_id,关联到系统表 ON sc.object_id = OBJECT_ID(tnl.name) -- 用log_list里的field_id匹配系统表的column_id AND sc.column_id = ll.field_id WHERE ll.date BETWEEN @startdate AND @enddate
几个需要注意的细节:
- 确保
table_name_list里的name是带架构的完整表名(比如dbo.user_info),不然OBJECT_ID()可能找不到目标表(尤其是同一库下有不同架构的同名表时)。 - 如果你的
field_id存储的不是sys.columns里的column_id,那得根据实际存储的字段标识调整关联条件,但根据你的描述应该是匹配的。 - 如果涉及跨数据库查询,要在
OBJECT_ID里加上数据库名,比如OBJECT_ID('YourDB.dbo.' + tnl.name)。 - 执行查询的账号需要有访问
sys.columns系统视图的权限,否则会出现权限不足的报错。
内容的提问来源于stack exchange,提问作者Hrs
相关产品推荐
相关产品推荐

