工作中,我们经常会碰到会为一个已有的系统增加一些东西,如在报表中增加一些字段,或者在导出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!!!