在使用SSIS加载到SQL Server数据库之前更改CSV格式的列

时间:2017-05-23 03:56:17

标签: sql-server csv ssis etl ssis-2012

我正在尝试使用SSIS在SQL Server数据库表中加载csv文件。 目前,在加载文件之前,我们在excel中打开文件,并将列B的格式从General更改为Number。 (如果没有这样做,则加载该列的错误数据)

例如,下面的第4行是日期,但在加载之前,我们将列B的格式从General更改为Number。 然后将其转换为值42767(正确的数据)

Column A Column B
-----------------  
1. 11622
2. IZED
3. DGA-435
4. 1/02/2017

现在我们必须自动化这个过程并使用一些逻辑,这可以在SSIS中完成吗? 请建议。

谢谢, AJ

1 个答案:

答案 0 :(得分:1)

您可以使用Vb.net (或c#)脚本并使用Microsoft.office.Interop.Excel

来实现此目的

注意:您必须将Microsoft.Office.Interop.Excel.dll文件添加到以下目录(.Net Framework dll目录)C:\Windows\Microsoft.NET\Framework\v2.0.50727和(sql server data tools dll目录)C:\Program Files\Microsoft SQL Server\100\DTS\Binn(使用visual studio 2005和sql 2008)然后在脚本任务中添加此dll作为参考

Imports Microsoft.Office.Interop.Excel

Public Sub Main()

        Dim m_XlApp As Application 

         m_XlApp = New Application
         m_XlApp.visible = False
         m_XlApp.DisplayAlerts = False

         Dim m_xlWrkbs As Workbooks = m_XlApp.Workbooks
         Dim m_xlWrkb As Workbook
         m_xlWrkb = m_xlWrkbs.Open(strFile) 'strFile must contains the fule path ex: C:\1.xls

         m_xlWrkb.DoNotPromptForConvert = True

        Dim m_xlsheet As Worksheet = w.Sheets(1)

        'Change the second column to number
        m_xlsheet.Cells(1,2).EntireColumn.NumberFormat = "0"

        m_xlWrkb.Save()
        m_xlWrkb.Close(SaveChanges:=True)

        m_XlApp.Quit()


End Sub

注意:如果您决定使用脚本任务实现此目的,则必须了解如何在脚本任务中添加自定义引用

可能有帮助的链接