FluentMigrator语言 - 检查列是否存在跨数据库



我正在使用FluentMigrator将多个数据库迁移到不同的模式。

如何检查另一个数据库中的表中是否存在列?

public override void Up()
{
//this line by default uses the current DB context and it works fine
var columnExistsInThisDb = Schema.Table("Subjects").Column("MatterKey").Exists();
//here I would like to check if column exist in "AnotherDatabase", 
//but I didn't manage to make it work
var columnExistsInAnotherDb = 
Database("AnotherDatabase") //<--- this is pseudo-code of what I would like to achieve 
.Schema.Table("Subjects").Column("MatterKey").Exists();

if (columnExistsInThisDb || columnExistsInAnotherDb)
{
Execute.Sql("--DO STUFF");
}
}

我已经尝试了下面的,但它返回FALSE,即使列存在。

var columnExistsInAnotherDb = Schema.Table("AnotherDatabase.dbo.Subjects").Column("MatterKey").Exists()

总的来说这是个坏主意。流畅的迁移器应该自己处理模式。在其他情况下,没有理由使用它。我建议您使用流畅的迁移器标记。它们是为处理不同的数据库而创建的。

但是如果你真的想按照你描述的那样做——这里有一个如何调用数据库脚本的例子(所有的东西你将从父类获得):

Execute.WithConnection((IDbConnection connection, IDbTransaction transaction) =>
{
var command = connection.CreateCommand();
command.Transaction = transaction;
command.CommandText = "SELECT * " +
"FROM INFORMATION_SCHEMA.COLUMNS " +
"WHERE table_name = 'tableName' " +
"AND table_schema = 'schema'" + 
"AND column_name = 'columnName'";
var count = command.ExecuteScalar();
});

相关内容

  • 没有找到相关文章

最新更新