我正在使用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();
});