我有以下代码:什么值应该.net SqlCommand.ExecuteNonQuery()返回,如果没有行受到影响?
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时,它会删除一行。请注意,在进行所有测试之前,我从仅为此目的保存的备份中恢复数据库。我发誓,今天早上或昨天下午没有删除任何行,是的,这是在恢复备份之后。我会让我疯狂的药丸磨损,并在今天下午重新审视这个问题。希望更清晰的头脑。
你是如何验证这个SQL删除数据库中没有行的? – 2010-05-27 14:20:16
通过在SqlServer Management Studio中直接在数据库中运行实际的SQL,并查看结果是什么。 – peacedog 2010-05-27 14:27:46
是否有可能找回子查询中的行? – 2010-05-27 14:41:45