BIML - 'AstTableNode' 不包含 'GetDropAndCreateDdl' 的定义

BIML - 'AstTableNode' does not contain a definition for 'GetDropAndCreateDdl'

我正在开发一个生成 SSIS 包的 BIML 项目。我有一个单独的静态 class 用于实用程序方法。

我正在尝试调用 GetDropAndCreateDdl() 从源中获取 DDL,以便在目标中动态创建 table。这在理论上应该有效,因为它在多个帖子中被引用:here and here 作为样本。

生成 BIML 时,运行 下面的示例代码,我收到一个错误:错误:'AstTableNode' 不包含 'GetDropAndCreateDdl' 的定义并且没有可以找到接受类型 'AstTableNode' 的第一个参数的可访问扩展方法 'GetDropAndCreateDdl'

public static string GetDropAndCreateDDL(string connectionStringSource, string sourceTableName)
{
    var sourceConnection = SchemaManager.CreateConnectionNode("Source", connectionStringSource);
    var sourceImportResults = sourceConnection.ImportTableNodes(Nomenclature.Schema(sourceTableName),Nomenclature.Table(sourceTableName));
    return sourceImportResults.TableNodes.ToList()[0].GetDropAndCreateDdl();

}

(为了简单起见,让我们忽略没有得到 table 回报或倍数的可能性)

查看 varigence documentation,我没有看到任何对此方法的引用。这让我觉得我的包含中缺少一个实用程序库。

你怎么说?

GetDropAndCreateDdlVarigence.Biml.Extensions.SchemaManagement.TableExtensions

中的扩展方法

ImportTableNodes returns 的实例 Varigence.Biml.CoreLowerer.SchemaManagement.ImportResultsTableNodesAstTableNodes

IEnumerable

所以,没有什么奇怪的(比如导入结果中的 table 节点是不同的类型)

如果我的代码与 BimlExpress 一致,我 运行 不会遇到问题。

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<#
string connectionStringSource = @"Provider=SQLNCLI11;Data Source=localhost\dev2017;Integrated Security=SSPI;Initial Catalog=msdb";

var sourceConnection = SchemaManager.CreateConnectionNode("Source", connectionStringSource);
List<string> schemaList = new List<string>(){"dbo"};
var sourceImportResults = sourceConnection.ImportTableNodes("dbo", "");
WriteLine("<!-- {0} -->", sourceImportResults.TableNodes.Count());
//var sourceImportResults = sourceConnection.ImportTableNodes(schemaList,null);
var x = sourceImportResults.TableNodes.ToList()[0];
var ddl = x.GetDropAndCreateDdl();
WriteLine("<!-- {0} -->", sourceImportResults.TableNodes.FirstOrDefault().GetDropAndCreateDdl());

#>
</Biml>

以上代码生成以下扩展的 Biml

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
  <!-- 221 -->
  <!-- IF EXISTS (SELECT * from sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[autoadmin_backup_configuration_summary]') AND type IN (N'V'))
DROP VIEW [dbo].[autoadmin_backup_configuration_summary]
GO

CREATE VIEW [dbo].[autoadmin_backup_configuration_summary]  AS
SELECT 
    ManagedBackupVersion,
    IsAlwaysOn,
    IsDropped,
    IsEnabled,
    RetentionPeriod,
    EncryptionAlgorithm,
    SchedulingOption,
    DayOfWeek,
    COUNT(*) AS DatabaseCount
FROM autoadmin_backup_configurations
GROUP BY
    ManagedBackupVersion,
    IsAlwaysOn,
    IsDropped,
    IsEnabled,
    RetentionPeriod,
    EncryptionAlgorithm,
    SchedulingOption,
    DayOfWeek

GO

 -->
</Biml>