SSIS 不将日期和货币类型作为格式正确的字符串导出到平面文件

SSIS not exporting dates and money types to flat file as correctly formatted string

我正在导出一个将被另一个系统拾取的文件。为了避免在其他系统中返工,我试图准确匹配现有的 excel csv 输出。我在数据库中有一个日期列,我想将其导出为 dd/mm/yyy。在数据流任务中,我将以下 SQL 作为我进行适当转换的来源。如果我 运行 在 ssms 中进行此查询,我会得到正确的输出。

SELECT [Code]
      ,[Agency_Name]
      ,[Region_Group]
      ,CONVERT( varchar(20), [GrossAmtYrly] , 1) GrossAmtYrly
      ,CONVERT ( varchar(20), [SaleDate] , 103) SaleDate
      ,[MemberNo]
      ,[Surname]
      ,[Scale]
  FROM [Land].[Sales]

然后我 link 将其发送到平面文件目标,将其映射到的列设置为 DT_SR 宽度 20 非文本限定。

但是输出文件以 yyyy-mm-dd 格式输出日期。

与 grossamtyrly 类似,旧的 excel 生成的 csv 的数量在每 3 位数字后用逗号分隔,包裹在 " 中。它映射到的输出列是 DT_SR 宽度 20,文本符合条件为真。

该列的输出文件缺少 grossamtyrly 的逗号。

看来我在 SQL 中的转化被完全忽略了,但我不知道为什么。

提前感谢您的任何建议!

使用 SSIS 2012 - Visual Basic 2010,数据库是 SQL Server 2012

我会在数据流中使用派生列将其转换为您想要的格式。如果它以 yyyy-mm-dd 格式的文本字段形式出现,您可以使用以下表达式将其转换为 dd/mm/yyyy:

SUBSTRING(dt,9,2) + "//" + SUBSTRING(dt,6,2) + "//" + SUBSTRING(dt,1,4)

谢谢 Custodian,我知道如何让它工作了。

我双击任务之间的流箭头,元数据选项卡显示每列的数据类型。当我第一次设置它时,我将访问模式设置为 table 或查看,因此日期和 grossamt 被设置为 DT_DATE 和 DT_CY,所以我认为 SSIS 隐含地将列再次转换回它的原始类型。

现在我不知道如何更改它们,所以我删除了数据库源并从 SQL 命令选项开始重新创建它,一切都按预期进行。