Excel 目标没有输入列
Posted
技术标签:
【中文标题】Excel 目标没有输入列【英文标题】:No Input column for Excel Destination 【发布时间】:2014-02-21 20:39:28 【问题描述】:我有一个包含十几个项目的 SSIS 控制流,运行此包的目标是在 SQL 中运行一些更新语句,然后运行查询以获取输出数据并将其写入 Excel 文件。所以我所做的是在我想要写入 Excel 的处理结束时创建一个“数据流任务”。转到“数据流”选项卡后,我添加了一个 OLE DB 源并设置连接并添加了一个 SQL 命令。这个 SQL 命令是生成我想要写入 Excel 的输出的原因。输出只有 1 列,我也在 OLE DB 源中映射。
之后,我添加了一个“Excel 目标”对象。然后,我在我们的网络上创建了一个与 Excel 文件的新连接,我希望在该文件中写入数据。我可以在文件中选择 Excel 工作表的名称,然后单击“映射”项。问题是“映射”页面上的“输入列”不允许我选择一个字段,它只有“忽略”。
我尝试使用 SSIS 创建 Excel 表(不起作用),并且我还在 SSIS 之外创建了 Excel 文件(不起作用),我不知道如何解决这个问题.
编辑:1)这确实创建了 excel 表,我能够在 Excel 目标对象上将两个字段映射在一起,但是我在对象上有一个红色的“X”,上面写着:XXX 列无法在 unicode 和非-unicode 数据类型。只要它有一个红色的“X”,我就不能使用这个对象。此外,在我正在使用的另一个 Excel 目标对象上,我在 SSIS 中以完全相同的方式创建表,但收到一条警告,说明将发生截断
2) 我正在使用带有 SP1 的 VS2008 进行开发。数据库是 SQL 2008r2。 excel 文件是 XLSX 文件,我的 Excel 连接管理器设置为使用 Office 2007。
3) 我与红色“X”的连接的列的数据类型是 DT_STR,长度为 50。我与 WARNING 的连接的列的数据类型是 DT_WSTR,长度 = 306。这些是只读的。
【问题讨论】:
(1) 当您说“我尝试使用 SSIS 创建 Excel 表(不起作用)...”时,发生了什么?如果有错误消息,您何时收到错误消息,消息是什么? (2) 另外,SQL Server 和 MS Office 的版本是什么? (3) 当您 dbl-click 数据流中的绿色箭头时(始终记住要 dbl-click 它——这不仅仅是显示元数据——它还 UPDATES 元数据)......该列的数据类型? ((参见表“将集成服务数据类型映射到数据库数据类型”,msdn.microsoft.com/en-us/library/ms141036%28v=sql.100%29.aspx)) 我在 OP 中回答了这些问题。答案太长,无法放入 cmets 【参考方案1】:啊...谢谢,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 转换还要工作。)
【讨论】:
我确实尝试在我的 SQL 脚本中转换为 NVARCHAR,但仍然无法解决这个问题,但使用数据转换任务就可以了。以上是关于Excel 目标没有输入列的主要内容,如果未能解决你的问题,请参考以下文章
查询值和目标字段的数量不同 - C# 脚本任务 SSIS - 使用动态列将 SQL Proc 的结果导出到 Excel