2017-04-26 73 views
0

我有一个表有50多列,但只有少数列正在使用。这意味着当任何存储过程使用该表时,它仅在select/where语句中引用4-5列。其余的列没有被使用。我只想列出实际使用的那些列。一种方法是找出表的依赖关系,然后遍历每个SP并找出哪些列正在使用。但在那种情况下,我有大约30+ Sp。有没有有效的方法来做到这一点。找出sql服务器中的表中所有有用的列

+0

我会在字典中寻找它,不记得...列使用(四)的东西。 – jarlh

+0

通过表中有用的列我的意思是一些存储过程引用这些列。如果在我的数据库中没有sp引用表中的特定列,那么该列对我没有用处。 – pKay

回答

2

试试这个:

select name from syscomments c 
join sysobjects o on c.id = o.id 
where TEXT like '%table_name%' and TEXT like '%column_name%' 

table_name中给你的表名,在列名给出了要CHCK程序dependencies.You将获得该存储过程的名称作为输出列

+0

非常感谢。这会做。 – pKay

3

要使用多个列在一个过程中,你可以使用一个代码像下面

create procedure sp_sample 
@column_names varchar(200) 
as 
if @column_names='' or @column_nams is null 
    set @column_names='*' 

exec ('select '[email protected]_name +' from table') 

下面是一些例子:

exec sp_sample @columnname='id,name' 

exec sp_sample @columnname='id,name,telphone' 
0

如果您导入数据库使用SQL Server Data Tools数据库项目,你将能够找到一个表或使用“查找所有引用”上下文命令列的所有引用。是什么使得这个特别有用的是准确性:它甚至会发现SELECT *的实例没有明确提及该列,但隐式地参考它。它也不会被具有类似名称的表或列混淆(发现ID的特定实例在其他方面存在问题)。

如果你想知道某个列是否被引用,你可以简单地删除它,看看是否有任何“未解决的引用”错误出现在错误列表中 - 如果是的话,那么该列在某处使用。

相关问题