我有一个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);
}