0

我希望从在 SQL Server 2005 上开发的遗留系统中清除迁移项目中的数据,但首要任务是找出哪些列并未真正使用。

我的方法背后的一般逻辑是识别大部分留空的列(即,对于该列,该表中的大多数或所有行都包含空值)。这将作为存储过程执行,其中理想的输出类似于:

TABLE: contacts (10000 records)
---------------------------------
FIELD: id | 0 (0%) Null Records
FIELD: username | 0 (0%) Null Records
FIELD: phonenumber | 8,200 (82%) Null Records
FIELD: email | 300 (3%) Null records
FIELD: icq | 9,900 (99%) Null Records
FIELD: zip | 100 (1%) Null Records

这里有个问题:有些表有超过 100 列,所以真正的关键是该过程循环遍历给定表的列,所以我不必键入一长串列名来运行查询。关于如何做到这一点的任何帮助都会很棒,

谢谢。

4

1 回答 1

3

您可以使用列元数据创建一些查询,如下所示:

select 'select ''' + table_name + ''' table_name, ''' 
+ column_name + ''' column_name, count(*) nullcount '
+ 'from [' + table_name + '] where [' + column_name + '] is null '
from information_schema.columns

如果您运行上面的查询,您将获得一个选择查询列表。将粘贴复制到文本编辑器并在选择之间插入“union all”,它看起来像这样:

select 'companies' table_name, 'id' column_name, count(*) nullcount from [companies] where [id] is null 
union all
select 'companies' table_name, 'code' column_name, count(*) nullcount from [companies] where [code] is null 
union all
...

然后运行那些联合选择。

对于表列表,您可以对 information_schema.tables 中的元数据使用相同的技巧。

然后使用 vlookup 在 excel 中组合这两个列表,或者使用 information_schema.tables 和 information_schema.columns 使用子查询构建更复杂的查询。

于 2012-01-11T05:23:49.380 回答