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

时间:2017-05-16 18:15:42

标签: sql-server excel csv ssms import-from-excel

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

1 个答案:

答案 0 :(得分:0)

一种解决方案是使用数据 - >文本到列,分隔,然后不选择任何分隔符。但是,Excel只允许您一次执行此列。但是,这个XLS读入SQL Server就像所有nvarchars一样。

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

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"导入数据" process会将每列视为nvarchar。通常是nvarchar(255)。