Das freut uns natürlich mächtig!
Verwaiste Felder: Leider nicht als simples „single click“-Feature.
Das liegt daran, dass wenn irgendein Scriptquellcode auf irgendeiner Serverfreigabe rumliegt und darin auf dieses Feld zugegriffen wird, es dann ein Problem gibt, wenn wir behaupten, dieses Feld sei verwaist, weil wir keine Kenntnis von dieser Scriptdatei haben.
Außerdem gibt es Lösungen, die dies Felder „hinterrücks“ befüllen/benötigen, um zum Beispiel in heterogenen Umgebungen Drittsysteme anzubinden bzw. eine Beziehung zu dortigen Daten herzustellen. Aus combit CRM-Sicht ist diese Feld eigentlich gar nicht wirklich „im Spiel“. Aber dennoch essentiell.
Dann gibt es noch Felder, die wichtig sind, aber visuell/interaktiv nie eine Rolle spielen, sondern nur in irgendwelchen ausgeklügelten freien SQL-Abfragefiltern.
Und so weiter…
Um die Hosen runterzulassen: wir kriegen das einfach nicht wasserdicht hin. Und wenn es nicht wasserdicht ist, dann lieber sagen, dass wir es nicht wissen, als so eine „recht wahrscheinlich aber ohne Gewähr“-Aussage, von der Sie sich dann bei Irrtum nichts kaufen können, wenn das Feld dann weg ist und doch gebraucht wird.
Was Sie machen könnten:
Folgende Abfrage liefert Ihnen eine Liste der Felder einer bestimmten Tabelle (hier: „Contacts“) sortiert nach der Anzahl unterschiedlicher Inhalte. Unter der Annahme, dass Test-Felder nicht gefüllt sind, weil sie gar nicht zum Leben erwachten, könnten Sie hier zumindest potentielle Kandidaten zuoberst in der Liste finden.
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql = @sql +
'SELECT ''' + COLUMN_NAME + ''' AS ColumnName, COUNT(DISTINCT CASE WHEN ' + QUOTENAME(COLUMN_NAME) + ' IS NOT NULL THEN ' + QUOTENAME(COLUMN_NAME) + ' END) AS DistinctCount FROM Contacts UNION ALL '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Contacts'
SET @sql = LEFT(@sql, LEN(@sql) - 10);
SET @sql = @sql + ' order by "DistinctCount"'
EXEC sp_executesql @sql;