找出sql server中表中所有有用的列

时间:2017-04-26 10:20:07

标签: sql sql-server database

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

3 个答案:

答案 0 :(得分:3)

要在过程中使用多个列,可以使用如下代码

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

exec ('select '+@column_name +' from table')

以下是一些例子:

exec sp_sample @columnname='id,name'

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

答案 1 :(得分: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中给出表名,在column_name中给出要为其查看过程依赖项的列。您将获取存储过程名称作为输出

答案 2 :(得分:0)

如果使用SQL Server Data Tools将数据库导入为数据库项目,则可以使用“查找所有引用”上下文命令查找对表或列的所有引用。使这个特别有用的是准确性:它甚至会发现SELECT *的实例没有明确提及列,但无论如何都隐式地引用它。它也不会被具有相似名称的表或列混淆(发现ID的特定实例是相当有问题的。)

如果您只想知道是否引用了一列,您只需将其删除,然后查看错误列表中是否出现任何“未解析的引用”错误 - 如果是,则在某处使用该列。