VS2017 SSIS中用表达式设置ServerName变量获取连接串服务器名报错求助
解决SSIS变量表达式中提取连接管理器服务器名的问题
错误原因
你遇到的"."未被识别的错误,根源是连接管理器属性的引用语法不正确。SSIS表达式中,连接管理器的属性不能直接通过@[InitialDB].ConnectionString引用,必须明确指定其所在的容器路径:@[Connection Managers::InitialDB].ConnectionString。解析器无法识别直接加点的写法,才抛出了语法错误。
另外,你对TOKEN函数的用法也有问题:TOKEN函数的第二个参数是分隔符字符串,而不是要匹配的前缀。你直接把"ServerName="作为分隔符,无法正确拆分出目标内容。
正确表达式示例
以下两种方式都能正确提取连接字符串中的服务器名:
方式1:针对包含ServerName=的连接字符串
TOKEN( SUBSTRING( @[Connection Managers::InitialDB].ConnectionString, FINDSTRING(@[Connection Managers::InitialDB].ConnectionString, "ServerName=", 1) + 11, LEN(@[Connection Managers::InitialDB].ConnectionString) ), ";", 1 )
FINDSTRING定位到"ServerName="的起始位置,加11("ServerName="的字符长度)得到服务器名的起始位置SUBSTRING截取从该位置到字符串末尾的内容TOKEN以";"为分隔符,取第一个分段(即服务器名)
方式2:针对包含Data Source=的连接字符串
TOKEN( SUBSTRING( @[Connection Managers::InitialDB].ConnectionString, FINDSTRING(@[Connection Managers::InitialDB].ConnectionString, "Data Source=", 1) + 12, LEN(@[Connection Managers::InitialDB].ConnectionString) ), ";", 1 )
- 逻辑和方式1一致,只是"Data Source="的长度是12,所以偏移量改为+12
额外说明
如果连接字符串中服务器名包含实例名(比如ServerName=MYSQL\INSTANCE),上述表达式依然能正确提取完整的服务器+实例名。
内容的提问来源于stack exchange,提问作者Working_at_It
相关产品推荐
相关产品推荐

