c# / SQL Server -确定表的顺序

本文关键字:顺序 SQL Server | 更新日期: 2023-09-27 18:16:02

如何获得表的顺序列表?

我有两个数据库(相同的模式),我想从第一个数据库导入数据到第二个数据库。

但是现在我有一个约束问题。所以我必须在插入之前对表进行排序。这是我的c#代码:

public static void SQLUpdate(DataSet ds)
{
   foreach (DataTable table in ds.Tables)
   {
      string TableName = table.TableName;
      DataTable CurrentDt = clsDatabase.SQLQuery("SELECT * FROM " + TableName);
      SqlDataAdapter da = new SqlDataAdapter("Select * FROM " + TableName, con);
      SqlCommandBuilder cb = new SqlCommandBuilder(da);
      foreach (DataRow row in table.Rows)
      {
         DataRow[] drs = CurrentDt.Select(String.Format("[ID] = '{0}'", row["ID"].ToString()));
         // No entry? INSERT!
         if (drs == null || drs.Length == 0)
         {
            da.InsertCommand = cb.GetInsertCommand();
            da.Update(new DataRow[] { row });
         }
         // Entry? UPDATE!
         else if (drs.Length == 1)
         {
            da.UpdateCommand = cb.GetUpdateCommand();
            da.UpdateCommand.CommandText += " WHERE ID = @ID";
            da.Update(drs);
         }
      }
   }
}

示例:两个表:

PERSON: ID, Name, AdressID

address : ID, Town

Person.ID = 1, Person.Name = "John Doe", Person.AdressID = 1
Adress.ID = 1, Adress.Town = "Downtown"

这是第一个数据库的行。我想用我的代码在第二个数据库中导入它。

地址必须是第一个插入,因为外键。然后我可以导入Person。

现在我需要一个表顺序列表,我可以看到我必须在Person之前导入Address

c# / SQL Server -确定表的顺序

也许你应该把你的约束设置为"deferred",这样它们就会在提交时被检查,而不是每次更新?

您可以从这个查询开始,以识别系统中所有的外键,以便确定需要哪些引用,查看哪些顺序:

http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table-in-database/