用实例分析如何整理SQL Server输入数据

作者:010032 时间:2009-01-20 15:16:00 

现有问题

当前的项目中包括一个6200万行、500多列的表。其中的数据来自SQL Server以外,它们到达的表中有一个标识主键,所有剩下的列以varchar(50)形式保存。

解决方案

有许多日期以YYYYMMDD格式保存,这是我注意到的第一个问题。我把这些日期改为整数列。然后我发现许多整数以varchar形式保存,我把它们都改为整数。

接下来,许多列中包含“Y”或“N”或NULL。我们很可能会把它们转换成位列,但这样做存在一个重大的缺陷——你不能索引一个位列。因此,我把它们改成char(1) NULL。

此外,还有一些列中保存有邮政编码,前面一列为五个数字,后面一列为四个数字或NULL。我将它们分别改成char(5)和char(4),都为NULL。

我遇到的另外一个问题是,我无法明白相当一部分列中的内容。我把它们单独处理,为varchar(50)。我希望确定每个varchar列中保存的字符串的最大长度,但要检查6200万行中的所有数据中不切实际的。因此,我选择生成所有列的char或varchar列表。

SELECT

COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE

FROM

INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME ='tblArthurClean'

AND DATA_TYPE IN('char','varchar')
 
我复制结果表中的第一列,把它粘贴到记事本中(这是我最喜欢的文本编辑器,因为它具有优秀的查找-替换功能。)要确定一个特定列中的最长数据,使用下列脚本:

SELECT Max(Len( ColumnName )) FROM TableName

推而广之,我希望遍历列列表并生成我需要的声明。我把需要的内容集中到一些格式化行中,用一个单独的查询来达到这个目的。

SELECT

',Max(Len( ' + COLUMN_NAME + ' )) AS ' + COLUMN_NAME

FROM

INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME = 'tblArthurClean'

AND DATA_TYPE IN( 'char', 'varchar' )

第二页中是一个简短的结果集。现在按照以下步骤执行:

1、把结果集粘贴到一个文本编辑器中。

2、在第一行前面插入SELECT。

3、在文件末尾增加FROM和表的名称。

4、我在文件开头和末尾添加以下内容。

SELECT GetDate() GO

然后我删除输出结果第一行前面的逗号,把它保存为一个查询,加载再让它运行。

我对它在我的服务器上的性能非常满意。它只用了一个小时多一点的时间计算出结果——对于分析一个6200万行几百列的表,时间不算太长。

得到的结果是一行结果集,我可以用它作为修改表结构和列名称的指导,并把这些结果与原始表联系起来,做出相应的调整。

本文说明退一步思考如何能够为你节省大量的输入时间。我的座右铭是:“只要SQL能够做的,它都应该完成。”

标签:
0
投稿

猜你喜欢

  • Dreamweaver使用快技法十三则

    2009-07-21 12:45:00
  • 瞬间的设计(四)【碳酸饮料会】

    2009-12-23 13:56:00
  • asp access数据库并生成XML文件范例

    2011-03-29 10:49:00
  • 只截取ip前6位的asp代码

    2009-05-29 18:30:00
  • 如何更快更好地调试ASP程序代码?

    2009-11-23 20:13:00
  • 用Oracle并行查询发挥多CPU的威力

    2010-07-23 12:52:00
  • MySQL Server 5.0安装教程(图解)

    2010-10-14 14:26:00
  • FrontPage2002简明教程三:网页布局

    2008-09-17 11:19:00
  • 详解php如何合并身份证正反面图片为一张图片

    2023-05-22 10:44:46
  • windows系统下让mysql支持federated的storage engine

    2010-01-20 11:16:00
  • 个人从事设计行业40句观感

    2008-04-07 13:58:00
  • jQuery点击改变链接的文本

    2010-03-19 18:11:00
  • 很无聊的一个找碴游戏

    2008-07-02 13:10:00
  • JavaScript中的this指针用法

    2007-08-26 17:29:00
  • asp如何让页面背景五彩缤纷?

    2010-05-13 16:38:00
  • ASP同一站点不同编码程序出现乱码解决办法

    2008-11-10 12:08:00
  • ASP提速技巧五则

    2008-03-20 13:20:00
  • 不要忽略了颜色的可用性

    2009-03-05 18:19:00
  • 怎样使MySQL在攻击者面前保持安全

    2008-11-17 20:09:00
  • 提升网站可用性的3个忠告

    2008-01-31 13:48:00
  • asp之家 网络编程 m.aspxhome.com