4

我已经generated and excel from SSIS package成功了。但是every column有额外的'(引号)标记为什么会这样?

在此处输入图像描述

我的源 sql 表如下所示

Name    price    address
ashu    123      pune
jkl     34       UK

在我的sql tableall column作为varchar(50)数据类型。在Excel Manager要创建表时, Excel Destination将所有列作为相同的varchar(50)数据类型。

并且在Data Flow我已经用来Data Conversion transformation防止unicode转换错误。

请建议我需要更改以获取 excel 文件中的清晰列。

4

5 回答 5

3

您可以创建一个模板Excel 文件,在其中指定了所有列类型(从常规更改为文本)和您需要的标题。将其存储在一个/Template目录中,并将其从 SSIS 包中复制到您需要它的位置。

在您的 SSIS 包中:

  1. 使用脚本组件将 Excel 模板文件复制到选择的目录中。
  2. 以编程方式更改其名称并将整个文件路径存储在将在相应数据流任务中使用的变量中。
  3. 为您的 Excel 连接管理器使用表达式生成器。设置要从变量中检索的ExcelFilePath 。
于 2013-05-23T07:24:19.620 回答
2

单引号或撇号是一种输入任何数据(在 Excel 中)并确保将其视为文本的方式,因此 Excel 不会将带有前导零或分数的数字解释为数字或日期。

例如 07456 的 NJ 邮政编码将被解释为 7456,但通过将其输入为 '07456 它会保持其前导零(请注意,示例中的数字左对齐,就像文本一样)

我猜 SSIS 正在添加引号,因为您的数据是 VARCHAR 类型

于 2013-05-23T03:57:41.963 回答
1

首先,在 SSIS 中为您的 excel 目标定义字段类型,任何非文本字段都将正确格式化而没有 '. 然后,在源和目标之间添加派生列转换,并对任何文本列使用替换语句。应该:

(REPLACE(Column1, "'","")
于 2013-05-23T04:35:08.063 回答
0

这给我带来了很大的问题!所以我完成了以下操作:您可以在 SSIS 包中的 excel 连接管理器中将 excel 版本更改为“Microsoft Excel 4.0”。然后在 excel 中按照选项 > 信任中心 > 信任中心设置 > 文件块设置 > 取消选中“Excel 4 工作簿”和“工作表”的“打开”复选框。

于 2014-10-07T09:45:20.977 回答
0

在使用 Excel 目标时这是一个特殊的问题,至少在旧版本的 SSIS 中是这样。要回答为什么问题,Microsoft 文档中有这样的内容:

将数据保存到 Excel 目标时,包含在 Excel 驱动程序中的 Jet 提供程序的以下行为可能会导致意外结果。

保存文本数据。当 Excel 驱动程序将文本数据值保存到 Excel 目标时,驱动程序会在每个单元格中的文本前面加上单引号字符 ('),以确保将保存的值解释为文本值。如果您拥有或开发其他应用程序来读取或处理保存的数据,则可能需要对每个文本值之前的单引号字符进行特殊处理。

取自https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms137643(v=sql.105)

于 2021-02-12T18:09:57.393 回答