SSIS中变量前面的美元符号是什么意思?

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

我正在尝试理解一个我没有构建的 SSIS 包,并且正在努力寻找变量。让我们调用变量:

MyVariable

但是,在 MyVariable 的定义中,有一个表达式,据我理解(这可能是错误的)这个表达式中也可以有变量。在我的特殊表达中有这样一个:

@[$Package::AnotherVariable] + "more stuff whatever"

我猜测 $Package 是对范围的一些引用,但我似乎无法在任何地方找到“AnotherVariable”的定义。有什么想法吗?

ssis visual-studio-2017
1个回答
0
投票

正常的 SSIS 变量采用以下形式

@[User::Variable]

User
是命名空间,而
Variable
是变量名

命名空间只是一个名称,因此我可以在同一范围内创建 3 个具有“相同”名称的变量,并且它可以工作,因为它们是不同的。

@[User::Variable]
@[StackOverflow::Variable]
@[billinkc::Variable]

作为一名顾问,我经常使用命名空间来确保我的模式可以在现有包中的任何客户端上工作而不会发生名称冲突。

事实上,您使用的每个 SSIS 包都有两个不同范围内的变量:

User
System
。在“变量”菜单中,“网格选项”将弹出,您可以检查“命名空间”和/或“显示系统变量”以查看我在说什么

这是如何读取完全限定变量名的基础知识。

但是美元符号呢?

SQL Server 2012 的出现为我们提供了出色的项目执行模型。我们遇到的问题/挑战之一是如何允许包以一种方式优雅地将信息传递给子/子包。因此,包参数诞生了。它们是特殊的只读变量,可以在包启动时接收值。

它们的形式是

@[$Package::PackageParameterHere]

$
有什么特别之处?没什么,这只是微软声称拥有另一个命名空间的方式。包参数命名空间始终为
$Package

当您得知他们对项目参数采用相同的“技巧”时,您会感到震惊吗?不,不会。项目参数是只读参数,项目中的每个包都可以引用。假设您做了很多文件工作——在开发中,基本路径可能是“C:\ssisdata\Project”,但是当您部署到生产时,该路径需要变为“D:\ssisdata\Project”或“\ server\share\ssisdata\Project" 假设您使用表达式基于 Project 参数构建路径,那么将所有包配置为使用正确的路径是轻而易举的事情。您只需为该环境提供单一配置即可。

@[$Project::ProjectParameter]

再次强调,$Project 是命名空间,ProjectParameter 是实际的变量名称

包和项目参数

© www.soinside.com 2019 - 2024. All rights reserved.