在SSIS中转义下划线

问题描述 投票:0回答:1

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

短信显示为OLEGALINITTEST

我有一种方法可以逃脱下划线,以便在短信上显示?

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

所需的输出是O_LEGAL_INIT_TEST

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

oracle ssis sms
1个回答
0
投票

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

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

如果您尝试使用“奇怪的东西”来命名SSIS对象,它将在操作上引发错误,例如

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

对于包名称本身,限制是相似的,但有所不同,因为Windows / Visual Studio会忽略

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

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

字符为系统保留名称,包括'CON','AUX','PRN','COM1'

或'LPT2'为'。'或“ ..”

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

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

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

给出起始软件包名称

  • a = b.SO_61618859_This_Is_Fun.dtsx
  • System :: 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,只需将变量标记为Read Only变量集合的一部分,以下脚本将在日志中记录值。对于您的情况,我将添加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);
}
© www.soinside.com 2019 - 2024. All rights reserved.