SQL - 通过某个字段名称找到数据库中对应的表

  工作中,我们经常会碰到会为一个已有的系统增加一些东西,如在报表中增加一些字段,或者在导出Excel文件时增加一些Column. 这时侯,我们不知道我们需要的数据在数据库中的哪个表中。至少,我们知道这个字段的名称吧!那我们就通过字段名称来找到数据库中对应的表。下面给出代码示例:

USE AdventureWorks
GO
select DISTINCT object_name(id)
from syscolumns
where name like '%EmployeeID%' order by 1
GO

  我需要找到EmployeeID是从哪个表里面来的,通过运行上面一条语句,可以找到所有使用了EmployeeID的表,视图,存储过程,函数等等。通过名称排除视图,存储过程,函数等等,剩下的都是表了。仔细分析一下,不难找到EmployeeID的主表。

      object_name(id):返回指定id的对象名称;

  syscolumns: 每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中;

  name : 是syscolumns 中的列,存储列名或过程参数的名称。

既然syscolumns是表示数据库系统中的行集,那sysobjects 就表示系统中所有的对象集,如表,视图等。下面的数据库语句可以查询数据库中是否含有指定表。

select * from sysobjects
where object_name(id) in (
'OE_ORDER_LINES_ALL',
'OE_ORDER_HEADERS_ALL',
'OE_TRANSACTION_TYPES_TL',
'FNDLOOKUPVALUES',
'HZ_CUST_SITE_USES_ALL',
'HZ_CUST_ACCT_SITES_ALL'

哈哈!happy programming!!!

posted @ 2011-01-19 14:41  scogee  阅读(3748)  评论(0编辑  收藏  举报