我有一个表,它有50+列,但是只有很少的列被使用。这意味着当任何存储过程使用该表时,它只引用select/where语句中的4-5列。其余的列没有被使用。我只想列出那些被实际使用的列。一种方法是查找表的依赖项,然后遍历每个SP并找出正在使用的列。但在这种情况下,我有30+ Sp。有没有什么有效的方法。
发布于 2017-04-26 10:37:51
试试这个:
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给出要为其设置的列时,dependencies.You将将存储过程名称作为输出
发布于 2017-04-26 13:20:33
若要在过程中使用多列,可以使用如下代码
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'发布于 2017-04-26 13:32:29
如果使用Server数据工具将数据库导入为数据库项目,则可以使用“查找所有引用”上下文命令查找对表或列的所有引用。这一点特别有用的是准确性:它甚至会找到SELECT *的实例,这些实例没有显式地提到列,但无论如何都会隐式地引用它。它也不会被具有类似名称的表或列所混淆(在其他情况下,查找ID的特定实例是相当有问题的)。
如果您只想知道某列是否被引用,您只需删除它,并查看错误列表中是否出现了“未解决的引用”错误--如果是,则该列将在某个位置使用。
https://stackoverflow.com/questions/43631381
复制相似问题