【问题标题】:What's the quickest way to configure SQL Sever data types?配置 SQL Server 数据类型的最快方法是什么?
【发布时间】:2020-07-14 12:02:47
【问题描述】:

我经常需要在 SQL Server 中导入大型表,其中有几十个(有时 100 多个)列,它们的数据类型遍布各处(通常存储为需要转换的字符串)。

我目前的方法是查看值的样本,确定最佳数据类型,然后使用以下方法更改列数据类型:

ALTER TABLE staff_mx ALTER COLUMN [First Name] varchar(50) 
ALTER TABLE staff_mx ALTER COLUMN [Preferred Name] varchar(50) 
ALTER TABLE staff_mx ALTER COLUMN [Middle Names] varchar(50)
ALTER TABLE staff_mx ALTER COLUMN [Last Name] varchar(50) 

但是,当我每次每张桌子都这样做 50 到 100 次之间时,我开始认为有更好的方法吗?

我正在使用导入向导加载平面文件,如果我在那里指定数据类型,这通常会给我一个错误(通常是一种奇怪的日期格式,它无法识别,需要预先操作才能将其存储为日期)。由于管理员设置了我的用户配置,因此批量插入不是一个选项(他们不会更改它)。

可能不是更快的方法,但我想我会问。谢谢!

【问题讨论】:

  • SSIS 以及大多数 ETL 工具也可以提供帮助。当您使用该工具创建目标表时,SSIS 会建议数据类型。它们并不总是准确无误,但它做得非常好,并且可以节省您在简单的事情上的时间。

标签: sql sql-server tsql import sqldatatypes


【解决方案1】:

不要更改表格。将数据加载到临时表中,然后为最终表执行所需的转换:

select convert(varchar(50), [First Name]) as firstName,
       convert(varchar(50), [Preferred Name]) as preferredName,
       . . . 
into real_table
from staging;

这使您有机会在需要时进行更复杂的转换。您还可以修复暂存数据中的列名。

您还可以预先定义表格并直接批量加载到表格中。但是,如果有必要,这不会让您有机会修复数据。

【讨论】:

  • @PhilCollins 您可能还想创建一个脚本或存储过程,以便在进行转换之前对临时表执行完整性检查。典型的检查可能包括:没有重复的电子邮件地址,没有未来的出生日期,...。
  • 感谢您的建议戈登。我不认为这会减少我必须做的工作量,但我认为这是处理这项任务的更好方法。 @HABO,这是个好主意,不是我以前做过的事情,但我可以尝试弄清楚。谢谢两位
  • @PhilCollins 。 . .如果您可以查看暂存数据并找出问题所在,则调试负载问题会简单得多。与调试数据问题相比,创建临时表和复制数据的开销基本上算不上什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多