Welcome 微信登录

首页 / 数据库 / MySQL / 教你如何解决整理SQL Server输入的数据

我当前的项目中包括一个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列表。
SELECTCOLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE FROMINFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME ="tblArthurClean"AND DATA_TYPE IN("char","varchar")
我复制结果表中的第一列,把它粘贴到记事本中(这是我最喜欢的文本编辑器,因为它具有优秀的查找-替换功能。)要确定一个特定列中的最长数据,使用下列脚本:
SELECT Max(Len( ColumnName )) FROM TableName
推而广之,我希望遍历列列表并生成我需要的声明。我把需要的内容集中到一些格式化行中,用一个单独的查询来达到这个目的。
SELECT",Max(Len( " + COLUMN_NAME + " )) AS " + COLUMN_NAME FROMINFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME = "tblArthurClean"AND DATA_TYPE IN( "char", "varchar" )
列表A中是一个简短的结果集。现在按照以下步骤执行:
Max(Len( Record_Length_Indicator_or_Filler )) AS Record_Length_Indicator_or_Filler, Max(Len( Job_Number )) AS Job_Number,Max(Len( Personal_or_Firm_Name )) AS Personal_or_Firm_Name,Max(Len( Mailing_Address_Supplied_by_Customer
把结果集粘贴到一个文本编辑器中。 在第一行前面插入SELECT。 在文件末尾增加FROM和表的名称。 我在文件开头和末尾添加以下内容。
SELECT GetDate()GO
然后我删除输出结果第一行前面的逗号,把它保存为一个查询,加载再让它运行。 我对它在我的服务器上的性能非常满意。它只用了一个小时多一点的时间计算出结果——对于分析一个6200万行几百列的表,时间不算太长。 得到的结果是一行结果集,我可以用它作为修改表结构和列名称的指导,并把这些结果与原始表联系起来,做出相应的调整。 本文说明退一步思考如何能够为你节省大量的输入时间。我的座右铭是:“只要SQL能够做的,它都应该完成。”四个语句帮你提高 SQL Server 的伸缩性管理员必读的10个重要MySQL客户启动选项相关资讯      SQL Server 
  • Build2016喜讯:Linux用户注册微软  (03月17日)
  • SQL Server on Linux 理由浅析  (03月09日)
  • 管理SQL Server服务的登录(启动)  (02月13日)
  • 微软要抢甲骨文用户?从Oracle迁移  (03月13日)
  • 微软发布面向Linux的SQL Server预  (03月08日)
  • SQL Server如何修改自增列值以及相  (01月23日)
本文评论 查看全部评论 (0)
表情: 姓名: 字数
版权所有©石家庄振强科技有限公司2024 冀ICP备08103738号-5 网站地图