0

明確性を高め、パフォーマンスを向上させるために、未使用のフィールドを削除したいテーブル。しかし、まず未使用のフィールドを見つけなければなりません。よりエレガントなソリューションの提案はありますか? おそらくSQLで?

4

2 に答える 2

0

データベースに対して実行される可能性のあるすべてのクエリを把握していない限り、未使用の列を検出する 100% 確実な方法はありません。

ここでは、カバーする必要がある 2 つの一般的な事項を示します。

  • データベース内のそのテーブルへのすべての参照を見つけます (このテーブルを参照している関数、ストアド プロシージャ、トリガーなど)。

  • 実行中のすべてのアプリケーション コードを調べて、そのテーブルへの参照が見つかるかどうかを確認します。

無料のツールであるため、データベース参照にはApexSQL Searchを使用してみてください。

于 2013-08-26T09:52:24.010 に答える
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; 
}
于 2013-08-25T20:11:50.470 に答える