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
。
也许你应该把你的约束设置为"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/