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,我没有看到任何对此方法的引用。这让我觉得我的包含中缺少一个实用程序库。
- 使用 Varigence.Biml.Extensions;
- 使用 Varigence.Biml.CoreLowerer.SchemaManagement;
你怎么说?
乔
GetDropAndCreateDdl
是Varigence.Biml.Extensions.SchemaManagement.TableExtensions
中的扩展方法
ImportTableNodes
returns 的实例
Varigence.Biml.CoreLowerer.SchemaManagement.ImportResults
而 TableNodes
是 AstTableNodes
的 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>
我正在开发一个生成 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,我没有看到任何对此方法的引用。这让我觉得我的包含中缺少一个实用程序库。
- 使用 Varigence.Biml.Extensions;
- 使用 Varigence.Biml.CoreLowerer.SchemaManagement;
你怎么说?
乔
GetDropAndCreateDdl
是Varigence.Biml.Extensions.SchemaManagement.TableExtensions
ImportTableNodes
returns 的实例
Varigence.Biml.CoreLowerer.SchemaManagement.ImportResults
而 TableNodes
是 AstTableNodes
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>