使用 SSIS 表达式在连接字符串中查找数据库名称

Find databasename in connectionstring using SSIS expression

我在 SSIS 2019 中有一个包含连接字符串的项目参数,例如具有以下值:

Data Source=SERVER1;Initial Catalog=CoolDatabase;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;

我正在尝试使用 SSIS 表达式从项目参数中提取字符串 CoolDatabase

我走到这一步却碰壁了......问题是我不知道如何找到初始目录名称的长度。在这种情况下它是 12 但它实际上可以是任何值。

@[User::databasename]=  SUBSTRING( @[$Project::DOELSERVER_ConnectionString] ,
 FINDSTRING( @[$Project::DOELSERVER_ConnectionString] ,"Initial Catalog=",1 ) + 16
,12
)

如何确定初始目录的长度? (在本例中为 12)

我是这样解决的:

  1. 如果您只想要 CoolDatabase 这样的结果,请使用此表达式:
RIGHT(
   LEFT( @[$Project::DOELSERVER_ConnectionString], FINDSTRING(@[$Project::DOELSERVER_ConnectionString], ";", 2) - 1),
   FINDSTRING( REVERSE(LEFT( @[$Project::DOELSERVER_ConnectionString], FINDSTRING(@[$Project::DOELSERVER_ConnectionString], ";", 2) - 1)), "=", 1) - 1
) 
  1. 如果您想要 Initial Catalog=CoolDatabase 这样的结果,请使用:
RIGHT(
   LEFT( @[$Project::DOELSERVER_ConnectionString], FINDSTRING(@[$Project::DOELSERVER_ConnectionString], ";", 2) - 1),
   FINDSTRING( REVERSE(LEFT( @[$Project::DOELSERVER_ConnectionString], FINDSTRING(@[$Project::DOELSERVER_ConnectionString], ";", 2) - 1)), ";", 1) - 1
)

这两个代码之间的唯一区别是第一个表达式中的 = 和最后第二个表达式中的 ;