应该是什么值.net SqlCommand.ExecuteNonQuery()如果​​没有行受影响则返回?

时间:2010-05-27 14:13:39

标签: .net sql sqlcommand

我有以下代码:

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时,它会删除一行。请注意,在所有测试之前,我从我为此目的保存的备份中恢复数据库。我发誓今天早上或昨天下午没有删除任何行,是的,这是在恢复备份之后。我要让疯狂的药片磨掉,今天下午重新回顾这个问题。希望有一个更清晰的头脑。

2 个答案:

答案 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上是否有任何触发器。