我必须编写一个查询来删除表格2表
DELETE FROM [Policies],[BackupSpec] WHERE [PolicyID] = @original_PolicyID
PloicyID是策略中的PK Backupspec中的FK和FK
任何建议??
SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["SumooHAgentDBConnectionString"].ConnectionString;
string sql = "DELETE FROM [Policies],[BackupSpec] WHERE [PolicyID] = @original_PolicyID";
string sql1 = "DELETE FROM [Backupspec] WHERE [PolicyID] = @original_PolicyID";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlCommand cmd1 = new SqlCommand(sql1, conn);
cmd.Parameters.AddWithValue("@original_PolicyID", item);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
答案 0 :(得分:1)
您无法一次从两个表中删除。这是SQl Server的限制,因此您别无选择,只能发送两个删除语句或在父记录上定义级联删除。我建议使用两个语句而不是级联删除,因为如果删除涉及许多记录,则级联删除会导致锁定问题。请记住,级联删除会影响所涉及的表中任何来源的任何删除,因此即使您一次只删除一条记录,如果将来某个人需要删除一百万条记录,也会产生影响。随着子表数量的增加,它也会花费更长时间并占用更多表。
答案 1 :(得分:0)
一次从一个表中删除并使用事务使其成为原子。或者将FK定义为ON DELETE CASCADE
并仅从父表中删除。
答案 2 :(得分:0)
更简洁的方法是从策略和备份规范表中删除2个单独的查询。我这样做的唯一原因是因为
1)。通过代码调试的其他人更容易理解发生的事情。
2)。通常由一个帮助分离代码的经理类管理。
答案 3 :(得分:0)
如果您先从Backupspec
执行删除,然后从Policies
删除,您的代码就可以使用。
FK阻止您首先删除Policies
记录(这是参照完整性的点)。