Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis BIML数据流无法读取配置文件_Ssis_Dataflow_Biml - Fatal编程技术网

Ssis BIML数据流无法读取配置文件

Ssis BIML数据流无法读取配置文件,ssis,dataflow,biml,Ssis,Dataflow,Biml,摘要 配置文件查找可用于执行SQL任务,但无法用于数据流任务 问题 我有两个数据库: 源(本地SQL Server数据库) 目标(Azure SQL数据库) 我有两个包,我想从BIML代码创建 1) 创建暂存(工作正常) 使用源数据库中的for each循环和元数据在目标数据库中创建表 2) 加载分段(不工作) 使用for each循环和数据流任务(从源到目标)加载目标数据库中创建的表 这两个包都需要使用我创建的包配置文件,该文件存储目标数据库(Azure数据库,使用SQL Server

摘要

配置文件查找可用于执行SQL任务,但无法用于数据流任务

问题

我有两个数据库:

  • 源(本地SQL Server数据库)
  • 目标(Azure SQL数据库)
  • 我有两个包,我想从BIML代码创建

    1) 创建暂存(工作正常)

    • 使用源数据库中的for each循环和元数据在目标数据库中创建表
    2) 加载分段(不工作)

    • 使用for each循环和数据流任务(从源到目标)加载目标数据库中创建的表
    这两个包都需要使用我创建的包配置文件,该文件存储目标数据库(Azure数据库,使用SQL Server身份验证)的用户名和密码

    使用此配置文件可以很好地用于包1),但当我尝试使用包2)的BIML代码创建SSIS包时,出现以下错误:

    Could not execute Query on Connection Dest: SELECT * FROM stg.SalesTaxRate. Login failed for user ''.
    
    我曾尝试使用包1)的BIML代码并添加一个数据流任务,这似乎引发了相同的错误-似乎在使用执行SQL任务时,它可以找到并使用配置文件没有问题,但在使用数据流任务时,它找不到

    包1的脚本):

    
    如果对象_ID('stg','U')不为空
    升降台。;
    创建表stg。
    (
    挑选*
    从…起
    
    配置文件:

    <?xml version="1.0"?>
    <DTSConfiguration>
      <Configuration ConfiguredType="Property" Path="\Package.Connections[Source].Properties[ConnectionString]" ValueType="String">
        <ConfiguredValue>"Data Source=YRK-L-101098;Provider=SQLNCLI11.1;Persist Security Info=true;Integrated Security=SSPI;Initial Catalog=AdventureWorks2016"</ConfiguredValue>
      </Configuration>  <Configuration ConfiguredType="Property" Path="\Package.Connections[Dest].Properties[ConnectionString]" ValueType="String">
        <ConfiguredValue>Data Source=mpl.database.windows.net;User ID=*****;Initial Catalog=mpldb;Provider=SQLNCLI11.1;Persist Security Info=True;Auto Translate=False</ConfiguredValue>
      </Configuration>
      <Configuration ConfiguredType="Property" Path="\Package.Connections[Dest].Properties[Password]" ValueType="String">
        <ConfiguredValue>******</ConfiguredValue>
      </Configuration>
      <Configuration ConfiguredType="Property" Path="\Package.Connections[Dest].Properties[UserName]" ValueType="String">
        <ConfiguredValue>******</ConfiguredValue>
      </Configuration>
    </DTSConfiguration>
    
    
    “数据源=YRK-L-101098;提供程序=SQLNCLI11.1;持久安全信息=true;集成安全性=SSPI;初始目录=AdventureWorks2016”
    数据源=mpl.database.windows.net;用户ID=***;初始目录=mpldb;提供程序=SQLNCLI11.1;持久安全信息=True;自动转换=False
    ******
    ******
    

    注意:“UserId”和“Password”的值在实际脚本中用正确的值填充。

    摘要
    问题在于,在通过使用Biml(构建时功能)生成包来开发包时,您试图使用包配置(SSIS运行时功能)

    发生了什么事?
    可以这样想。如果要在开发过程中手动创建SSIS包,则必须通过指定用户名和密码连接到源数据库和目标数据库。如果不连接到数据库,SSIS将无法获取所需的元数据。一旦开发了包且所有元数据都已更新映射后,您可以使用包配置。当您使用包配置打开或执行包时,所有硬编码值都将替换为配置值。此值替换是SSIS运行时功能

    现在,将其与使用Biml而不是手动创建SSIS包进行比较:生成包时,您希望Biml引擎从包配置文件中获取用户名和密码。由于这是SSIS运行时功能,Biml无法获取该数据,将使用Bim中指定的连接字符串lScript。由于这些连接字符串未指定用户名和密码,Biml将无法连接,并且用户“”的错误登录失败。(这类似于在SSIS中创建连接管理器而不提供用户名和密码,并且在单击“测试连接”时出错。)

    但它适用于执行SQL任务?
    它可能看起来像,但实际上不是。执行SQL任务基本上只是被忽略。在执行包之前,SSIS或Biml引擎不会检查或验证执行SQL任务中的SQL代码。您可以在其中键入任何内容,SSIS会很高兴,直到您尝试执行无效代码,此时它会给您一个错误。因为e此代码在开发过程中未经SSIS验证,在包生成过程中未经Biml验证。包成功生成,打开后,将应用包配置,并且不会看到任何错误

    但是,OLE DB目标在开发过程中由SSI和Biml引擎进行验证。它们都需要连接到数据库以获取元数据。这就是为什么仅此文件会出错的原因

    解决方案

    包配置仅是SSIS运行时功能。您不能使用它们将连接字符串、用户名或密码传递给Biml引擎。您可以在BimlScript中硬编码连接字符串,也可以将连接字符串存储在外部元数据存储库中,但您需要向Biml引擎提供用户名和密码在包生成过程中使用Biml引擎。

    好问题-我会看看是否可以让Biml hivemind参与进来。可以尝试的一件事是用括号将目标外部表括起来
    Table=“[stg].]”
    我在这一过程中遇到过这样的情况mattered@billinkc感谢您的回复。这些表读起来很好-在创建包时未能使用配置文件更是一个问题。我总是很瘦
    <#@ import namespace="System.Data" #>
    <#@ import namespace="System.Data.SqlClient" #>
    <#@ template language="C#" tier="2" #>
    <#
        string _source_con_string = @"Data Source=YRK-L-101098;Persist Security Info=true;Integrated Security=SSPI;Initial Catalog=AdventureWorks2016";
        string _dest_con_string = @"Data Source=mpl.database.windows.net;Initial Catalog=mpldb;Provider=SQLNCLI11.1;Persist Security Info=True;Auto Translate=False";
    
        string _table_name_sql = "select  TABLE_SCHEMA , table_name from INFORMATION_SCHEMA.TABLES  where TABLE_TYPE='BASE TABLE'"; 
    
        DataTable _table_names = new DataTable();
        SqlDataAdapter _table_name_da = new SqlDataAdapter(_table_name_sql, _source_con_string);
        _table_name_da.Fill(_table_names);  
    
    #>
    
    <Biml xmlns="http://schemas.varigence.com/biml.xsd">
      <Connections>
        <OleDbConnection Name="Source" ConnectionString="Data Source=YRK-L-101098;Provider=SQLNCLI11.1;Persist Security Info=true;Integrated Security=SSPI;Initial Catalog=AdventureWorks2016" />
        <OleDbConnection Name="Dest" ConnectionString="Data Source=mpl.database.windows.net;Initial Catalog=mpldb;Provider=SQLNCLI11.1;Persist Security Info=True;Auto Translate=False" />
      </Connections>
        <Packages>
            <Package Name="006_Load_Staging_Configuration" ConstraintMode="Linear">
                <PackageConfigurations>
                    <PackageConfiguration Name="Configuration">
                        <ExternalFileInput ExternalFilePath="C:\VSRepo\BIML\Configurations\AzureConfigDF.dtsConfig"></ExternalFileInput>
                    </PackageConfiguration>
                </PackageConfigurations>
                <Tasks>
                <Container Name="Load Staging Tables" ConstraintMode="Linear">
                    <Tasks>
                        <# foreach(DataRow _table in _table_names.Rows) {    #>     
                        <Dataflow Name="DFT-S_<#= _table["TABLE_NAME"] #>">
                            <Transformations>
                                <OleDbSource Name="SRC-<#= _table["TABLE_SCHEMA"] #>_<#= _table["TABLE_NAME"] #>" ConnectionName="Source">
                                    <DirectInput>
                                        SELECT  *
                                        FROM <#= _table["TABLE_SCHEMA"] #>.<#= _table["TABLE_NAME"] #>
                                    </DirectInput>
                                </OleDbSource>
                                <OleDbDestination Name="DST-<#= _table["TABLE_SCHEMA"] #>_<#= _table["TABLE_NAME"] #>" ConnectionName="Dest">
                                    <ExternalTableOutput Table="stg.<#= _table["TABLE_NAME"] #>"/>
                                </OleDbDestination>
                            </Transformations>
                        </Dataflow>
                        <# } #>
                    </Tasks>
                </Container>
                </Tasks>        
            </Package>
        </Packages>
    </Biml>
    
    <?xml version="1.0"?>
    <DTSConfiguration>
      <Configuration ConfiguredType="Property" Path="\Package.Connections[Source].Properties[ConnectionString]" ValueType="String">
        <ConfiguredValue>"Data Source=YRK-L-101098;Provider=SQLNCLI11.1;Persist Security Info=true;Integrated Security=SSPI;Initial Catalog=AdventureWorks2016"</ConfiguredValue>
      </Configuration>  <Configuration ConfiguredType="Property" Path="\Package.Connections[Dest].Properties[ConnectionString]" ValueType="String">
        <ConfiguredValue>Data Source=mpl.database.windows.net;User ID=*****;Initial Catalog=mpldb;Provider=SQLNCLI11.1;Persist Security Info=True;Auto Translate=False</ConfiguredValue>
      </Configuration>
      <Configuration ConfiguredType="Property" Path="\Package.Connections[Dest].Properties[Password]" ValueType="String">
        <ConfiguredValue>******</ConfiguredValue>
      </Configuration>
      <Configuration ConfiguredType="Property" Path="\Package.Connections[Dest].Properties[UserName]" ValueType="String">
        <ConfiguredValue>******</ConfiguredValue>
      </Configuration>
    </DTSConfiguration>