SSIS中的转义下划线



我有一个SSIS表达式。如下所示:我将这个包的结果作为短信发送,但短信没有显示下划线,因此我现在选择使用破折号。

短信显示为OLEGALINITTEST

我有一种方法可以摆脱下划线,让它显示在短信上吗?

REPLACE(@[System::PackageName],"_","-"(=O-LEGAL-INIT-TEST

所需输出为O_LEGAL_INIT_TEST

我将字符串中的下划线替换为"-"短划线。我将变量发送到发送实际短信的Oracle包。

@[System::PackageName]通常与没有文件扩展名的文件名相同,因此给定名为This-Is-Fun.dtsx的包,我们希望PackageName属性为This-Is-Fun

但是,有些情况并非如此。如果我们将程序包命名为A=B.C_D.dtsx,则程序包的最终对象名称为A B C_D。每个有问题的字符都会替换为空格。

如果您试图用"来命名SSIS对象;有些奇怪的事情;它会像一样在操作中抛出错误

名称不能包含以下任何字符:/\:[].=

对于程序包名称本身的限制是相似的,但不同,因为Windows/Vistudio将拒绝

包含以下任何字符:/?:&\*"lt>|#%

包含Unicode控制字符包含无效的代理

字符是系统保留名称,包括"CON"、"AUX"、"PRN"、"COM1">

或"LPT2"为"。"或"..">

与SSIS中的表达式一样,检查您正在构建的内容。在指定表达式的位置创建SSIS变量。

假设您创建了一个名为SMS_CONTENT数据类型字符串的SSIS变量,然后我将用下划线替换空格。表达式为

REPLACE(@[System::PackageName], " ", "_")

给定的起始包名称

  • a=b.SO_61618859_This_Is_Fun.dtsx
  • 系统::PackageName变为a b SO_61618859_This_Is_Fun
  • SMS_CONTENT变为a_b_SO_61618859_This_Is_Fun

如果它在开发过程中运行良好,但在生产中出现问题,请通过脚本任务的信息事件记录值,以便在运行后查看日志。https://billfellows.blogspot.com/2016/04/biml-script-task-test-for-echo.html您不需要Biml,只需将变量标记为只读变量集合的一部分,下面的脚本就会将值记录在日志中。在您的情况下,我会添加System::PackageName,然后添加SSIS变量User::SMS_CONTENT

bool fireAgain = false;
string message = "{0}::{1} : {2}";
foreach (var item in Dts.Variables)
{
Dts.Events.FireInformation(0, "SCR Echo Back", string.Format(message, item.Namespace, item.Name, item.Value), string.Empty, 0, ref fireAgain);
}

最新更新