通过导入数据向导将引号转义的 CSV 导入 SQL Server 到所有 nvarchar 列

Posted

技术标签:

【中文标题】通过导入数据向导将引号转义的 CSV 导入 SQL Server 到所有 nvarchar 列【英文标题】:Importing quote-escaped CSV into SQL Server via Import Data wizard into all nvarchar columns 【发布时间】:2017-05-16 18:15:41 【问题描述】:

我有一个这样的 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

诸如用户的 cmets 之类的字段将包含逗号,因此这些字段通过单引号或双引号进行转义。 Excel 可以很好地打开这些文件,并可用于在导入前清理或操作数据。

从迁移的角度来看,对我来说最简单的事情是先将数据作为 varchars 导入 SQL Server,然后使用 SQL 将数据操作为目标格式。

我确实遇到了以下问题:

1) 尝试导入 CSV 可能会导致问题。 SQL Server Management Studio 的导入需要严格格式化的 CSV,这意味着像 cmets 列或文本中格式化为货币的数字可能会导致导入失败。

2) 将 CSV 保存为 XLS 时,SQL Server Management Studio 似乎仍然在尝试“聪明”地解释数据的方式,无论其格式如何。有时,即使您愿意,也无法将数据转换为 nvarchar 或 varchar,因为导入实用程序已经假定数据是数字的。制表符分隔可能最终无法正常工作,尤其是对于用户 cmets 之类的内容。

将 CSV 导入 SQL Server,使所有列变为 varchar 或 nvarchar 的无错误方法是什么?

【问题讨论】:

【参考方案1】:

一种解决方案是使用 Data -> Text to Columns,分隔,然后不选择任何分隔符。但是,Excel 一次只允许您执行这一列。但是,这个 XLS 可以很好地读入 SQL Server,就像所有 nvarchars 一样。

进一步修改此解决方案,您可以创建以下宏,将其保存到 PERSONAL.XLSB 中,以便在以后的所有工作表中都可用。通过将此宏映射到一个组合键,您可以选择一个单元格,然后宏将选择该列,然后为您运行文本到列功能:

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)。

【讨论】:

以上是关于通过导入数据向导将引号转义的 CSV 导入 SQL Server 到所有 nvarchar 列的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 phpmyadmin 向导将 csv 导入 mysql 数据库

通过 sql developer 导入 csv 时,单引号被转换为 2 个单引号

如何把csv文件导入到sql数据库

几个CSV大文件如何导入mysql数据库,并更新替换对应数据?

Access 解析 CSV 文件中的双引号的问题

SQL导入csv数据后,表格的数据有双引号,请问有人知道怎么去掉双引号吗?不去掉双引号,筛选不了数据?