我有以下代码:
int result = -1;
StringBuilder sb = new StringBuilder();
SqlCommand cmd = MyConnection.
sb.AppendLine("delete from Table1 where ID in");
sb.AppendLine("(select id from Table1 t1 where not exists(select * from Table2 t2 where t2.Table1ID = t1.ID))");
cmd.CommandText = sb.ToString();
result = cmd.ExecuteNonQuery();
_log.Info("StoredXMLDocument Records Deleted: " + result.ToString());
该SQL以更易读的格式:
delete from Table1 where ID in
(select id from Table1 t1 where not exists(select * from Table2 t2 where t2.Table1ID = t1.ID))
我知道SQL直接在数据库中执行时不会删除任何行。但是,当此代码运行时,结果的值为1. I was expecting it to be 0。 Table1上没有触发器。我错过了什么吗?为什么是1?
附录:好的,现在当我在数据库中运行sql时,它会删除一行。请注意,在所有测试之前,我从我为此目的保存的备份中恢复数据库。我发誓今天早上或昨天下午没有删除任何行,是的,这是在恢复备份之后。我要让疯狂的药片磨掉,今天下午重新回顾这个问题。希望有一个更清晰的头脑。
答案 0 :(得分:1)
它应该返回0
。
尝试比较SELECT COUNT(*) Table1
之前和之后的DELETE
。
答案 1 :(得分:0)
作为旁注,您的查询可以简化为:
delete from Table1 where ID not in (select Table1ID from Table2)
出于兴趣的目的尝试这个:
delete from Table1 where 1 = 0 --we know this will delete no rows
另外,请确认Table1
上是否有任何触发器。