SSIS Replace的定义介绍及应用实例

291 阅读5分钟

SSIS Replace

SSIS Replace的定义

REPLACE命令用一个新的substring()替换一个字符串中所有出现的子串。REPLACE函数通常使用长字符串。而且它经常被用来修复表中的数据。例如,用一个较新的实例替换一个旧的链接。此外,SSIS使用派生列转换来替换许多字词。

什么是SSIS替换?

用一个不同的字符串或空字符串替换表达式中仅有的一个字符串,以返回一个文本表达式。语法是这样的

REPLACE (character_expression,searchstring,replacementstring)

  • 字符表达式。该函数寻找一个有效的字符表达式。
  • 该函数寻找一个有效的字符表达式,称为搜索字符串。
  • 替换字符串。替换表达式是一个有效的字符表达式。

替换空

如果第一个表达式参数的值是Blank,则返回第二个表达式的值;否则,返回第一个表达式的值。

用另一个值替换NULL:

ISNULL(ColName)?"New Val”: ColName

如何使用SSIS替换?

在本教程中,我将演示如何替换一个文件的内容。

在这个方案中,我将演示以下操作:
1.将.sql文件的内容读入一个变量。

2.为了获得当前月份的数据,改变T-SQL查询的WHERE条件。

3.将文件的内容返回到文件中。

步骤1:创建一个新的SSIS包,并添加以下两个包变量。

1-1

第2步: 将脚本任务重命名为脚本任务-读取文件,然后查找和替换字符串。接下来,在脚本任务编辑器中双击选择User: File Path作为ReadOnlyVariables,User::FileContent作为Read Write Variables。现在进入编辑脚本...,复制并粘贴以下代码。

public void Main()
{
String EInfo = "";
String FPath = Dts.Variables["User::FPath"].Value.ToString();
try
{
String FContent;
FContent = ReadFile(FPath, EInfo);
if (EInfo.Length > 0)
{
Dts.Log("Error when a file is read " + FPath, 0, null);
Dts.Log(EInfo, 0, null);
Dts.Result = (int)ScriptResults.Failure;
return;
}
DateTime currDate, StartDate, EndDate;
currDate = DateTime.Today;
StartDate = currDate.AddDays(-(currDate.Day - 1));
EndDate = StartDate.AddMonths(1).AddDays(-1);
MessageBox.Show(FContent);
FContent = FContent.Replace(
"D.DateKey BETWEEN 21081201 AND 21070121",
"D.DateKey BETWEEN " +
String.Format("{0:yyyyMMdd}", StartDate) + " AND " +
String.Format("{0:yyyyMMdd}", EndDate)
);
MessageBox.Show(FContent);
Dts.Variables["User::FContent"].Value = FContent;
WriteToFile(FPath,FContent,EInfo);
if (EInfo.Length > 0)
{
Dts.Log("While Writing on a file throws an error " + FPath, 0, null);
Dts.Log(EInfo, 0, null);
Dts.Result = (int)ScriptResults.Failure;
return;
}
}
catch (Exception e1)
{
Dts.Log(e1.Message, 0, null);
Dts.Result = (int)ScriptResults.Failure;
}
}
public String ReadFile(String FPath, String EInfo)
{
String strCont;
StreamReader sRe;
try
{
sRe = File.OpenText(FPath);
strCont = sRe.ReadToEnd();
sRe.Close();
return strCont;
}
catch (Exception e1)
{
MessageBox.Show(EInfo);
EInfo = e.Message;
return "";
}
}
public void WriteToFile(String FPath, String strCont, String EInfo)
{
StreamWriter sWr;
try
{
sWr = new StreamWriter(FPath);
sWr.Write(strCont);
sWr.Close();
}
catch (Exception e)
{
MessageBox.Show(EInfo);
EInfo = e.Message;
}
}

第3步: 软件包的更新现在已经完成。为了测试输出,请运行该包。

2

SSIS替换功能

当要求的操作是 "查找和替换 "时,该任务提供以下选项:

1.找到一个匹配的组合。

2.替换--一个可以用来代替匹配组合的单词或短语。如果为真,源码就包含在一个包变量中。除此以外,就是文件连接管理器(布尔型)。

3.SourceVariable是一个包变量,来自一个源(String)。变量类型可以是字符串(源文件的路径)或对象(流)。

4.Source是一个文件连接管理器,允许你连接到一个源文件(Connection)。

如果IsTargetVariable为真,目标就包含在包变量中。除此以外,它是文件连接管理器(Boolean)。

5.目标包变量(target variable)(字符串)。变量类型可以是字符串(源文件的路径)或对象(流)。
6.target - 目标的文件连接管理器(连接)。

在SSIS中可以使用正则表达式来帮助数据净化。RegEx Replace Transform是一种比较简单的使用正则表达式进行数据净化的技术。在数据流任务中把RegEx替换转换连接到OLE DB源。

要打开编辑器,双击RegEx Replace Transform。然后,点击我们想用RegEx改变的字段旁边的下拉箭头。然后,我们可以按照我们的意愿指定转换来进行清理。在正则表达式中,人们可以有效地识别组。每一组小括号代表一个单一的Regex模式。它们以各自的格式被访问:(从1开始)。选择 "用用户定义的值替换匹配的正则表达式模式 "作为动作。我们也可以使用我们定义的RegEx模式从字段中提取一串文本。选择 "用固定值替换列数据 "作为输出动作。

3

SSIS替换表达式示例

SQL服务器集成服务(SSIS)表达式可以使SSIS应用程序变得非常灵活。为了做到这一点,我们将利用Flat Files连接的表达式。二进制运算符 "+"与数据类型 "DT WSTR "和 "DT I4 "是不合适的。如下图所示,右键单击并选择属性,然后在属性窗口中单击表达式。

SSIS Replace - 4

让我们看一个例子来进一步掌握SQL中替换的语法以及它是如何工作的。

例子#1

REPLACE ("Swizz Valley", "Swizz","Mountains")

在这个例子中,字符串 "Valley "被从产品列中删除。

例子#2

REPLACENULL ((NULL(DT_DECIMAL, 2)), 0 )
// Replaces null val to ‘0’ . And returns an Output 0.00

例子#3

替换函数 o 替换每个字符

(DT_STR,8,1262) REPLACE(PPB,"-","") // to get1234567

引号(")字样被添加到源字符串中。

有两个选择:

1.修改你的平面文件源,为这个字段定义引号字符,这样字符串开头和结尾的" "值就会被删除。

2.为了摆脱引号,使用另一个替换。

REPLACE(REPLACE(PPB,"\"",""),"-","")

结论

因此,在这篇文章中,我们学习了以上关于SSIS中replace()的一切。SSIS replace()函数可以快速有效地替换大型数据库和表中的特定数据。在这篇文章中我们介绍了一些SSIS替换表达式的优秀例子。SSIS表达式扩展了你的包的功能,并有助于动态修改。