如何在表中查找未使用的字段

时间:2013-08-25 20:11:50

标签: sql-server linqpad

我希望删除未使用的字段以提高清晰度并可能提高性能。但首先我必须找出未使用的字段。有关更优雅解决方案的任何建议吗?也许在SQL?

2 个答案:

答案 0 :(得分:0)

这是linqpad中的C#程序。

void Main()
{
    // Row count of non null fields in a table

    var l = Mapping.MappingSource.GetModel(typeof(DataContext)).GetMetaType(typeof(Briefing)).DataMembers;

    var list = new List<xfield>();
    object[] xparams = new object[0];
    foreach( var field in l.Where (x => x.DbType != null) ) {
        var sql = string.Format("SELECT count({0}) from table_name where {0} is not null", field.Name.ToLower());
        var result = ExecuteQuery<int>( sql, xparams );
        var count = result.First();
        list.Add( new xfield { name = field.Name, rows = count } );
    }   
    list.Where( e => e.rows == 0 ).Dump();
}

public class xfield
{
    public string name;
    public int rows; 
}

答案 1 :(得分:0)

除非您知道针对数据库执行的所有可能查询,否则没有100%可靠的方法来发现未使用的列。

以下是您需要涵盖的两件事:

  • 在数据库中查找对该表的所有引用(函数,存储过程,触发器和其他引用此表的引用)。

  • 检查正在执行的所有应用程序代码,看看是否可以找到对该表的引用。

尝试将ApexSQL Search用于数据库引用,因为它是一个免费工具。