我有一个这样的CSV数据表:
a | b | c | d | f
1: 12 Dave Larry $1234.0 FALSE
2: 324.0 Bob Gray $24.012 TRUE
3: 2000 John Stan $204.0
4: 9000 Stace Jill - FALSE
5: 850.0 Till $30 TRUE
诸如用户注释之类的字段将包含逗号,因此这些逗号通过单引号或双引号进行转义。Excel可以很好地打开这些内容,可用于在导入之前清理或操作数据。
从迁移的角度来看,对我来说最简单的事情是先将数据作为varchars放入SQL Server,然后使用SQL将数据操作为目标格式。
我确实遇到了以下问题:
1) 尝试导入 CSV 可能会导致问题。SQL Server Management Studio 的导入需要严格格式的 CSV,这意味着注释列或文本中格式化为货币的数字等内容可能会导致导入失败。
2)当将CSV保存为XLS时,SQL Server Management Studio似乎仍然试图在如何解释数据方面保持"智能",无论其格式如何。有时,即使您愿意,也无法将数据转换为 nvarchar 或 varchar,因为导入实用程序已经假定数据是数字。制表符分隔最终也可能无法正常工作,尤其是对于用户评论之类的内容。
将CSV导入SQL Server,使所有列都成为varchar或nvarchar的无错误方法是什么?
一种解决方案是使用 Data -> 文本到列,分隔,然后不选择任何分隔符。但是,Excel 一次只允许您执行一列。但是,这个XLS可以很好地读取SQL Server,就像所有nvarchars一样。
进一步修改此解决方案,您可以创建以下宏,并将其保存到 PERSONAL 中。XLSB,以便在所有将来的工作表中可用。通过将此宏映射到组合键,您可以选择 a 单元格,然后宏将选择该列,然后为您运行文本到列功能:
Sub ColumnToNVarChar()
'
' ColumnToNVarChar Macro
' Convert a column in Excel to a format that SQL Server Management Studio's import process will interpret as nvarchar.
'
' Keyboard Shortcut: Ctrl+d
'
ActiveCell.EntireColumn.Select
Selection.TextToColumns Destination:=ActiveCell.EntireColumn, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 2), TrailingMinusNumbers:=True
End Sub
然后,将其另存为 XLS 文件,SQL Server Management Studio 的"导入数据"过程会将每一列视为 nvarchar。通常是nvarchar(255)。