C#SMO-检查目标服务器上是否已存在该表

时间:2012-10-30 06:12:38

标签: c# smo

我已经编写了一个C#代码来使用SMO在两个远程服务器之间传输表,我想知道的是,无论如何都要检查目标服务器中是否已存在具有确切模式,列名,数据类型的表,约束和一切。然后我不必每次都丢弃现有的表并创建新表。

1 个答案:

答案 0 :(得分:2)

试试这段代码片段:

Server srv1 = new Server("<server_location>");
srv1.ConnectionContext.LoginSecure = false;
srv1.ConnectionContext.Login = "<username>";
srv1.ConnectionContext.Password = "<password>";
srv1.ConnectionContext.Connect();
Database sourceDb = srv1.Databases["<database_name>"];
Table sourceTbl = sourceDb.Tables["<table_name>"];

Server srv2 = new Server("<server_location>");
srv2.ConnectionContext.LoginSecure = false;
srv2.ConnectionContext.Login = "<username>";
srv2.ConnectionContext.Password = "<password>";
srv2.ConnectionContext.Connect();
Database destinationDb = srv1.Databases["<database name>"];
Table destinationTbl = sourceDb.Tables["<table_name>"];

var isMatched = CompareTables(sourceTbl, destinationTbl);    

比较方法:

bool CompareTables(Table source, Table destination)
{
    // Column count doesn't match
    if (!source.Columns.Count.Equals(destination.Columns.Count))
        return false;

    // Assuming the order of the Columns are same in both the Tables
    for (int i = 0; i < source.Columns.Count; i++)
        if (!source.Columns[i].Equals(destination.Columns[i]))
            return false;

    // Constraints count doesn't match
    if (!source.Checks.Count.Equals(destination.Checks.Count))
        return false;

    // Assuming the order of the Contraints are same in both the Tables
    for (int i = 0; i < source.Checks.Count; i++)
        if (!source.Checks[i].Equals(destination.Checks[i]))
            return false;

    return true;
}