我有一个包含大约十二个项目的SSIS控制流程,运行此包的目的是在SQL中运行一些update语句,然后运行查询以获取输出数据并将其写入excel文件。所以我所做的就是在处理结束时创建一个“数据流任务”,我想写入Excel。在转到“数据流”选项卡后,我添加了一个OLE DB源并设置了连接以及添加了一个SQL命令。这个SQL命令生成我想写入Excel的输出。输出只有一列,我也在OLE DB源中映射。
之后我添加了一个'Excel Destination'对象。然后我创建了一个新的连接到我们想要写入数据的网络上的Excel文件。我可以在文件中选择excel表的名称,然后单击“Mappings”项。问题是'Mappings'页面上的'Input Column'不允许我选择一个字段,它只是'忽略'。
我尝试过使用SSIS创建Excel表格(不起作用),我也在SSIS之外创建了Excel文件(不起作用),我无法弄清楚如何解决这个问题。
编辑:1)这确实创建了excel表,我能够在Excel目标对象上将两个字段映射在一起但是我在对象上有一个红色的“X”表示:列XXX无法在unicode和non之间进行转换-unicode数据类型。只要它有一个红色的'X',我就无法使用这个对象。此外,在我正在使用的另一个Excel目标对象上,我在SSIS中以完全相同的方式创建表,但得到警告说明将发生截断
2)我在VS2008 w / SP1中开发。数据库是SQL 2008r2。 excel文件是XLSX文件,我的Excel连接管理器设置为使用Office 2007。
3)我与红色'X'的连接列的数据类型是DT_STR,长度50.我与WARNING连接的列的数据类型是DT_WSTR,长度= 306。是只读的。
答案 0 :(得分:0)
啊......谢谢,Baub - 记得将来发布错误消息......这会让你快速轻松地回答:
用于导出到Excel的MS Office“引擎”仅接受Unicode文本(SQL中的NVARCHAR或SSIS中的DT_WSTR)。它不接受ASCII文本(SQL中的VARCHAR或SSIS中的DT_STR)。
我发现,最简单的方法是在T-SQL中转换列。既然你说长度= 50:
Column2Export = CONVERT(NVARCHAR(50),OriginalColumn)
另一种方法是在SSIS中进行,但我认为这样做的工作要多得多。在您的数据流任务中,您将在源组件和目标组件之间添加数据转换组件。为什么这样做更有效:点击每列的数据类型......如果布局发生变化,需要再次执行此操作。如果您在T-SQL中进行转换,那么SSIS可以通过重新创建源,箭头和目标来自动检测新列。数据转换组件并非全部自动检测。
有关更多信息,请参阅姐妹网站dba.StackExchange.com上的两个答案:
https://dba.stackexchange.com/questions/41608/converting-non-unicode-string-to-unicode-string-ssis
(第二个答案是关于可下载组件“替换数据转换”......但我认为这比T-SQL转换还要多。)