SSIS变量更改时间分量

时间:2018-11-10 02:03:51

标签: sql-server ssis

我有一个名为“ DestinationDirectory”的SSIS变量,具有以下表达式:

@[User::SourceDirectory] + "\\" + REPLACE(SUBSTRING((DT_WSTR,35)((DT_DBTIMESTAMPOFFSET, 7) GETDATE() ),1,19),":","")

它返回例如:

C:\Finance Extract\2018-11-10 125913

然后,我还有很多其他变量,例如下面的一个名为“ DestinationFileAdjustment”的变量,它们可以处理“ DestinationDirectory”。它具有以下表达式:

@[User::DestinationDirectory] 
+ "\\Adjustment_"
+ RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd" , GETDATE()), 2)
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252) DATEPART("mm" , GETDATE()), 2)
+ "_"
+ (DT_STR, 4, 1252) DATEPART("yyyy" , GETDATE())
+ ".csv"

应该发生的是在该目录中创建一个文件。我遇到的问题是每次引用@DestinationDirectory时,都会返回不同的时间值(例如C:\ Finance Extract \ 2018-11-10 125914),并且由于目录不存在而出错。

有没有一种方法可以在运行时设置该变量,并且每次引用该变量时都保留相同的时间值?

2 个答案:

答案 0 :(得分:1)

为了解决这个问题,我最后要做的是在其中包含一个脚本任务和以下代码:

Dts.Variables("User::DestinationDirectory").Value = Dts.Variables("User::SourceDirectory").Value.ToString + "\\" + Replace(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), ":", "")

该硬编码很好地编码了变量的值。

答案 1 :(得分:1)

由于您在表达式中使用<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.4.3/fabric.js"></script> <h1> Dual canvas test </h1> <div style="position: relative; height: 300px"> <canvas class="canvas specimen-canvas" id="specimenCanvas" width="300" height="300"></canvas> <canvas class="canvas label-canvas" id="labelsCanvas" width="300" height="300"></canvas> </div>,因此我猜您正在使用包在“ DestinationDirectory”变量中开始的时间?如果是这样,使用GETDATE()系统变量作为该变量中的表达式(下面的示例)将提供此时间,并且在整个包执行期间保持一致。

@[System::StartTime]