SQL Server SSIS包平面文件目标文件名模式(日期、时间或类似)?

15
我正在安排一个 SSIS 包用于将数据导出到平面文件。
但是,我希望生成包含一些日期信息的文件名,例如 foo_20140606.csv。
这可行吗?
谢谢。

请问如何在部署包到远程服务器时将此参数化?我需要通过配置表使外部服务器中的路径可配置。 - rinilnath
4个回答

33

通过表达式可以使连接变得更加动态。

从“连接管理器”面板中选择您的平面文件连接。在“属性”窗格中,单击“表达式(...)”选项。然后从下拉列表中选择ConnectionString属性,并将表达式放入“表达式(...)”中并评估它。

表达式构建 -

For day : (DT_STR,4,1252)DAY( DATEADD( "dd", -1, getdate() ))
For month: (DT_STR,4,1252)MONTH( DATEADD( "dd", -1, getdate() ))
For Year:  (DT_STR,4,1252)YEAR( DATEADD( "dd", -1, getdate() ))

示例表达式(您需要根据自己的要求进行调整)-

"E:\\Backup\\EmployeeCount_"+(DT_STR,4,1252)DATEPART( "yyyy" , getdate() ) + RIGHT("0" + (DT_STR,4,1252)DATEPART( "mm" , getdate() ), 2) + RIGHT("0" + (DT_STR,4,1252)DATEPART( "dd" , getdate() ), 2) +".txt" 

该值为 E:\Backup\EmployeeCount_20140627.txt

请注意 - 您需要一个工作的平面文件连接,因此首先创建平面文件连接,其connectionString属性将自动被表达式替换。

您也可以按照这些逐步文章进行操作。

SSIS 动态命名目标

SSIS 动态平面文件连接

enter image description here

enter image description here


2
哦,我喜欢你的更好,它有漂亮的图片! :) - Kritner
请问如何在部署包到远程服务器时将此参数化?我需要通过配置表使外部服务器中的路径可配置。 - rinilnath
如果您使用 SSIS 目录 作为部署模型,那么您可以配置项目/包级别的参数和连接。在 SSMS 中,转到 Integration Services Catalog,然后右键单击项目/包,您将看到该选项。 - Vikramsinh Shinde

2

在连接管理器中选择您的文件连接,进入属性并点击表达式旁边的(...)。

在编辑器中选择属性列中的ConnectionString。 在表达式文本框中,您可以输入类似于“rootNameOfFile”+(DT_WSTR,50)(DT_DBDATE)GETDATE()+“.csv”的内容。

评估您的表达式以确保您得到了预期的结果,完成!


1
如果您没有SSDT,因此无法使用GUI编辑,请按如下方式直接编辑SSIS包:
之前:
<DTS:ConnectionManager
      DTS:refId="Package.ConnectionManagers[DestinationConnectionFlatFile]"
      DTS:ObjectName="DestinationConnectionFlatFile"
      DTS:DTSID="{C69365C4-EF12-4606-980B-E8862EE997A4}"
      DTS:CreationName="FLATFILE">
      <DTS:ObjectData>

之后:

<DTS:ConnectionManager
      DTS:refId="Package.ConnectionManagers[DestinationConnectionFlatFile]"
      DTS:CreationName="FLATFILE"
      DTS:DTSID="{C69365C4-EF12-4606-980B-E8862EE997A4}"
      DTS:ObjectName="DestinationConnectionFlatFile">
      <DTS:PropertyExpression
        DTS:Name="ConnectionString">"C:\\Exportdir\\Filename_"
 + (DT_WSTR,4)DATEPART("yyyy",GetDate()) +
RIGHT("0" + (DT_WSTR,2)DATEPART("mm",GetDate()) ,2) +
RIGHT("0" + (DT_WSTR,2)DATEPART("dd",GetDate()),2) + "_" +
RIGHT("0" + (DT_WSTR,2)DATEPART("hh",GetDate()),2)+
RIGHT("0" + (DT_WSTR,2)DATEPART("mi",GetDate()),2) + ".csv"      
      </DTS:PropertyExpression>
        <DTS:ObjectData>

0

在SSIS包中,您可以轻松地为平面文件或csv文件指定动态文件名,例如DataFeed_{yyyyMMdd}.txt(例如DataFeed_20181212.txt)。只需转到平面文件连接管理器属性并定义表达式值即可,另一种方法是定义包级变量,您可以在表达式中使用此变量,并根据环境使用配置文件.dtsconfig文件定义文件夹位置。

更多细节请参见 ssis dynamic file name for flat file


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接