Ssis 使用“中已创建的连接”;“连接管理器”;转换成Biml脚本

Ssis 使用“中已创建的连接”;“连接管理器”;转换成Biml脚本,ssis,connection,biml,ssis-connection-manager,Ssis,Connection,Biml,Ssis Connection Manager,我在SSIS“连接管理器”中已有一个源连接。它是一种自定义连接(不是oledb或任何其他标准连接类型)。是否可以在Biml脚本中重用它(即调用它),而无需再次写入连接字符串 我在互联网上看到了两种方法,但都不适用于我:我做了一个连接Advanturwork数据库的示例,下面是项目的屏幕截图、错误消息以及两种方法的代码 这是项目文件 这是连接管理器XML文件(MyConn.conmgr) 现在是Biml代码(方式1): 我得到的错误是: 第二个Biml代码(方式2): 错误消息相同:

我在SSIS“连接管理器”中已有一个源连接。它是一种自定义连接(不是oledb或任何其他标准连接类型)。是否可以在Biml脚本中重用它(即调用它),而无需再次写入连接字符串

我在互联网上看到了两种方法,但都不适用于我:我做了一个连接Advanturwork数据库的示例,下面是项目的屏幕截图、错误消息以及两种方法的代码

这是项目文件

这是连接管理器XML文件(MyConn.conmgr)

现在是Biml代码(方式1):


我得到的错误是:

第二个Biml代码(方式2):


错误消息相同:

示例中的p.S.MyConn是一个oledb,但在实际项目中,它是一个自定义连接,已在“连接管理器”中定义,我只需要在biml脚本中使用(称之为)

谢谢,
齐亚德

好了,现在我看得足够明白这个问题了

在SSIS项目中,您有一个项目级连接管理器“MyConn”。这是在Biml之外生成的

在Biml文件中,您希望引用现有的物理连接管理器。不幸的是,这不可能直接实现。Biml定义了项目中的所有工件及其依赖关系。Biml引擎使用所有这些来创建输出-在这种情况下,输出将是

  • 包裹
  • [项目级连接管理器]
  • [SSIS项目文件]
[可选]

您需要将输出(连接管理器)和反向工程转换为Biml。有两种简单的方法:BimlOnline.com或BimlStudio。BimlOnline仍处于测试阶段,如果它对您有效,那就太棒了。否则,你 需要下载/注册并使用现有SSIS项目(Integration Services project 1.dtproj)的15天试用和逆向工程。这将为自定义连接管理器提取Biml

如果没有,那么它会变得丑陋,因为你必须猜测/篡改你的语法,或者尝试发送电子邮件support@varigence.com看看他们是否帮不了你

现在,一旦你有了一个工作的连接字符串,你就需要在你使用它的地方修复上面的Biml

第一个biml 在第一个示例中,只有在Connections集合中定义了连接的情况下,
才起作用。在下面的Biml中,我在Connections集合中定义了MyConn。然后,在package集合下的package
Package1
中,我提供了对该连接管理器的显式引用,并指定了应该为其分配的GUID。这可能需要,也可能不需要在您的包,但我的一般经验是,它将不需要

<Biml>
    <Connections>
        <Connection Name="MyConn" ConnectionString="ABC" />
    </Connections>
    <Packages>
        <Package Name="Package1" ConstraintMode="Linear" >
        <Connections>
            <Connection ConnectionName="MyConn" Id="FB58654F-7992-4DB2-9057-38595A89B6BF"></Connection>
        </Connections>
        </Package>
    </Packages>
</Biml>
早期但可能有用的Biml漫谈 我想你问的是代码重用

在SSIS项目中,有两个Biml文件:Connections.Biml和Packages.Biml

Connections.biml看起来像(近似值)


我们在上述问题中定义了实际的biml包。Packages.biml文件中可以定义连接集合,也可以引用现有文件。有多种方法可以使用双LexPress实现这一点

多点单击选项 在Visual Studio中,多选择(控制,左键单击)Connections.biml和Package.biml文件,然后选择Generate SSIS Packages

Reeves对这个问题有很好的解释,但简短的一点是所有静态文件都将首先编译并可供参考。然后是任何包含代码的Biml文件,如Packages.Biml

您可以根据需要多选—我的典型项目有一个Connections.biml文件,通常有一个Packages.biml(构建工作包)和一个Master.biml(处理包执行的编排)

导入文件 将文件导入Biml有不同的机制,但最常见的两种是
include
指令和
CallBimlScript
函数。Include可以看作是一个宏扩展,
将被替换为该文件的内容

可以看作是函数调用,因为它是。我可以在我传入的引用文件中定义属性(参数),以控制生成的biml

在这两种情况下,这些实体在biml项目中都不存在/无法引用,例如,
RootNode.Connections[“MyConnection”]
,因为它们是在此层中编译的

双音箱
如果您决定购买BimlStudio,第三种方法是将Connections.biml文件设置为活动biml脚本(或执行Connections.biml文件),使其具有持久的内存对象供参考。

好的,现在我已经了解了足够的内容,可以理解这个问题了

在SSIS项目中,您有一个项目级连接管理器“MyConn”。这是在Biml之外生成的

在Biml文件中,您希望引用现有的物理连接管理器。不幸的是,这不可能直接实现。Biml定义了项目中的所有工件及其依赖关系。Biml引擎使用所有这些来创建输出-在这种情况下,输出将是

  • 包裹
  • <#@ import namespace="System" #>
    <#@ import namespace="System.Data" #>
    
    <Biml xmlns="http://schemas.varigence.com/biml.xsd">
        <# var Source = (AstDbConnectionNode)RootNode.Connections["MyConn"]; #>
        <Packages>
            <Package Name="Package1" ConstraintMode="Linear" >
                <Tasks>
                    <Dataflow Name="DF1">
                        <Transformations>
                            <OleDbSource Name="Get Data" ConnectionName="Source">
                                <ExternalTableInput Table="Person.Person"/>
                            </OleDbSource>
                        </Transformations>
                    </Dataflow>
                </Tasks>
            </Package>
        </Packages>
    </Biml>
    
    <Biml>
        <Connections>
            <Connection Name="MyConn" ConnectionString="ABC" />
        </Connections>
        <Packages>
            <Package Name="Package1" ConstraintMode="Linear" >
            <Connections>
                <Connection ConnectionName="MyConn" Id="FB58654F-7992-4DB2-9057-38595A89B6BF"></Connection>
            </Connections>
            </Package>
        </Packages>
    </Biml>
    
    <Biml xmlns="http://schemas.varigence.com/biml.xsd">
        <# var Source = (AstDbConnectionNode)RootNode.Connections["MyConn"]; #>
        <Packages>
            <Package Name="Package1" ConstraintMode="Linear" >
                <Tasks>
                    <Dataflow Name="DF1">
                        <Transformations>
                            <OleDbSource Name="Get Data" ConnectionName="Source">
                                <ExternalTableInput Table="Person.Person"/>
                            </OleDbSource>
                        </Transformations>
                    </Dataflow>
                </Tasks>
            </Package>
        </Packages>
    </Biml>
    
    <Biml>
        <Connections>
            <Connection Name="MyConn" ConnectionString="ABC" />
        </Connections>
    </Biml>