SQL Server 2005从Excel导入

SQL Server 2005从Excel导入,sql,sql-server-2005,excel,ssis,Sql,Sql Server 2005,Excel,Ssis,我想知道我最好的选择是每周或每月从excel文件导入数据。起初,我以为我会使用SSIS,但在经历了许多看似简单的任务后,我开始重新思考我的计划。手工编写SQL或使用SSIS包的服务会更好/更容易吗?基本流程如下: 另一个进程将把.xls文件下载到本地文件共享 xls文件的文件名类似于:“myfilename MON YY” 我需要从文件名中读取月份和年份,将其重新格式化为sql日期,然后查询DimDate表以查找相应的日期键 对于每一行(前两个标题行之后),插入带有日期键的数据,除非该行是总计行

我想知道我最好的选择是每周或每月从excel文件导入数据。起初,我以为我会使用SSIS,但在经历了许多看似简单的任务后,我开始重新思考我的计划。手工编写SQL或使用SSIS包的服务会更好/更容易吗?基本流程如下:

  • 另一个进程将把.xls文件下载到本地文件共享
  • xls文件的文件名类似于:“myfilename MON YY”
  • 我需要从文件名中读取月份和年份,将其重新格式化为sql日期,然后查询DimDate表以查找相应的日期键
  • 对于每一行(前两个标题行之后),插入带有日期键的数据,除非该行是总计行,否则忽略
  • 以下是我在SSI中遇到的一些问题: 我可以从平面文件数据源解析日期字符串,但似乎不能用excel数据源解析。此外,一旦解析,我似乎无法将字符串转换为日期来执行日期键的查找。例如,我想做这样的事情:

    从DimDate中选择DateKey 其中ActualDate=转换(日期时间,'01-'+'JAN-10',120)

    但我认为在表达式生成器中不可能使用“convert”或“datetime”关键字。我也找不到可以编辑SQL以忽略前两行数据的地方


    我非常怀疑使用SSIS,因为它似乎是一种笨拙的方法,可以通过自己编写SQL来更有效地完成某些事情,但我可能被迫使用SSIS。想法?

    SSIS无疑是一个方向

    为了解决您的问题:(DT_DBTIMESTAMP)是您想要的转换。语法有点不同。例如,要转换您的示例日期,我将使用:

    (DT_DBTIMESTAMP)"01/01/2010"
    
    如果在派生列中使用该表达式替换字符串日期(或创建新列),则可以在DB中对日期时间列进行查找

    如果需要排除前两行,则需要编写SQL语句来查询文件(与excel文件读取器源相反),或者根据每次导入时可以重复的任何条件,使用条件拆分将它们丢弃


    平面文件更易于使用,并且允许您丢弃x个初始行。

    SSIS无疑是一个方向

    为了解决您的问题:(DT_DBTIMESTAMP)是您想要的转换。语法有点不同。例如,要转换您的示例日期,我将使用:

    (DT_DBTIMESTAMP)"01/01/2010"
    
    如果在派生列中使用该表达式替换字符串日期(或创建新列),则可以在DB中对日期时间列进行查找

    如果需要排除前两行,则需要编写SQL语句来查询文件(与excel文件读取器源相反),或者根据每次导入时可以重复的任何条件,使用条件拆分将它们丢弃


    平面文件更易于使用,并且允许您丢弃x个初始行。

    我同意Kenneth的观点-SSIS是使用的工具。关于日期格式的一点意见——我将使用YYYY-MM-DD——它是ISO/SQL明确的格式。我同意Kenneth的观点——SSIS是使用的工具。关于日期格式的一条评论——我将使用YYYY-MM-DD——它是ISO/SQL明确的格式。