Sql server SQL Server导入/导出数据向导与DTExec for Excel日期

Sql server SQL Server导入/导出数据向导与DTExec for Excel日期,sql-server,excel,ssis,dts,Sql Server,Excel,Ssis,Dts,我正在尝试使用Visual Studio 2015中最新的SSDT作为SQL Server 2014项目/包创建Excel电子表格。我首先使用SQL Server导入/导出数据向导运行并创建了一个DTS包,该包发出一个简单的查询,以从SQL Server数据库表中检索数据,该表包含一个DATETIME列n,并将其导出到Excel,将DATETIME列保留为Excel中的日期 在向导期间运行DTS包将正确创建列值为日期的Excel文件。但是,当我使用Visual Studio 2015(使用32位

我正在尝试使用Visual Studio 2015中最新的SSDT作为SQL Server 2014项目/包创建Excel电子表格。我首先使用SQL Server导入/导出数据向导运行并创建了一个DTS包,该包发出一个简单的查询,以从SQL Server数据库表中检索数据,该表包含一个DATETIME列n,并将其导出到Excel,将DATETIME列保留为Excel中的日期

在向导期间运行DTS包将正确创建列值为日期的Excel文件。但是,当我使用Visual Studio 2015(使用32位模式)或任何32位版本的DTExec实用程序重新运行向导保存到文件系统的DTS包时,Excel文件总是以列值作为文本创建。Excel工作表是使用“DateTime”类型创建的,内部SSIS类型是DT_DBTIMESTAMP。我使用的是Microsoft.ACE.OLEDB.12.0 32位驱动程序,因为我在开发人员工作站上安装了Office 2016 32位驱动程序(尽管可能会在生产服务器上使用64位版本)

您对使用向导运行与在Visual Studio或DTExec中运行的区别有何看法?这快把我逼疯了

或者是否有人有任何不同的方法来强制此列成为Excel中的日期

谢谢


Bryan

通过SSIS将
日期
记录导出到excel将始终被视为
文本
,除非您的excel工作表中已经有虚拟记录,然后在虚拟行之后立即导入到该excel。假设您将虚拟行设置为
DATE
format

,谢谢您的评论。向导是否创建了这些虚拟记录,这些虚拟记录不包括在它创建的DTS包中?这就是它的工作原理,但运行创建的DTS包却不行吗?如果是这样,为什么我看不到输出文件中的虚拟记录?这可能是在通过sql server使用DTS包时在内部完成的,不确定它用于处理这些记录的内部逻辑是什么,但是,在需要与SSIS中的数据类型相同的输出之前,您必须先创建具有特定数据类型的虚拟行。您可以在线向我指出任何示例吗?我假设Excel文件必须事先使用虚拟行创建,但向导会创建该文件。但我不知道怎么做。DTS包有一个Prepare SQL语句,该语句发出一个CREATE Table“Sheet1”查询,以在Excel电子表格中创建工作表。如果该工作表中已存在该文件,则此语句将失败。所以我不知道如何事先创建虚拟记录。您将如何删除虚拟记录?对于虚拟行,您必须手动提前。我不确定是否有这样一份文件。但你可以做的是:打开excel;转到第1页;将1990年1月1日放在A列的第一个单元格中;然后突出显示整个A列,将类型更改为最新;之后,使用数据流任务导入A列第#1行之后的日期记录;在第一个单元格之后插入到sheet1中的任何日期都将是日期格式;处理伪行的最好方法是手动删除它们。我实现了您提出的解决方案,它按预期工作,尽管我必须创建一个伪格式行。当我实现它的时候,我意识到我在很多年前就这样做是为了解决同样的问题。我想时间并不能解决所有问题!删除虚拟行对我来说不太有效,因为我需要在生产服务器上安装Excel互操作库,所以我只是隐藏了该行。现在我已经把你的答复记为答案了。仍希望找到一种方法,在不使用虚拟格式行的情况下执行此操作。