2
da@[User::Log_path] + @[System::PackageName] + " " + SUBSTRING( (DT_WSTR,29) GETDATE(),1,10)
+  " "+
 ((LEN((DT_WSTR, 2) DATEPART("Hh", GETDATE()))>1)?
(DT_WSTR, 2) DATEPART( "Hh", GETDATE() ) : "0" +(DT_WSTR, 2) DATEPART( "Hh", GETDATE()    )) + "h "+ 

((LEN((DT_WSTR, 2)DATEPART( "mi", GETDATE()))>1)?
(DT_WSTR, 2) DATEPART( "mi", GETDATE() ) :"0" + (DT_WSTR, 2) DATEPART( "mi", GETDATE() )) + "m " +

 ((LEN((DT_WSTR, 2)DATEPART( "ss", GETDATE()))>1)?
(DT_WSTR, 2) DATEPART( "ss", GETDATE() ) :"0" + (DT_WSTR, 2) DATEPART( "ss", GETDATE() )) + "s  " +

 SUBSTRING(@[System::UserName],5,100) +".txt"

我在属性表达式编辑器中使用了上述内容。执行包后,它会创建三个日志文件:一个包含完整信息,另外两个仅包含标题。有时,这三个都包含日志详细信息。很迷茫,怎么回事。

4

2 回答 2

3

如果我是个猜猜的人,我敢打赌,在你的包执行过程中 GETDATE 会被多次评估。我对您的代码的阅读表明您正在构建基于包名称、日期和小时/分钟/秒的路径。每次调用 GETDATE 时,它都会返回当前值。而不是使用 GETDATE,我认为你真正想要的是包开始的当前时间。通过检查日志文件的内容,您将能够推断出其余的时间信息。

如果是这种情况,简单的解决方法是将所有的替换GETDATE()为系统变量StartTime@[System::StartTime]

于 2013-07-12T12:27:43.770 回答
0

我要疯了。根据上面 billinkc 的建议,我能够让 System StartTime 工作。

我想知道它是否取决于字符串中变量的数量。

这就是我最终做的事情。对于我的日志文件连接管理器,我使用的是用户变量表达式。在我的名为 logFileName 的用户变量中,它是以下表达式。你可以看到我在这里只调用了一个变量。也许如果您使用多个相互构建的变量,它只会创建一个文件?

我希望这有帮助。

    "\\\\hard-coded-server-name\\Interfaces\\DailyLogFiles\\logoutput_" +
    REPLACE(REPLACE( (DT_STR,256,1252) @[System::StartTime], "/", "_"), 
    ":", "_") +".txt"

只是为了提供更多信息,我想根据服务器名称更改路径,但我永远无法让它成为动态的,尝试使用 MachineName 但没有运气。

祝你好运。

于 2017-05-04T15:41:23.930 回答