次のコードがあります。
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 になります。期待していたのは 0です。Table1 にはトリガーがありません。何か不足していますか?なんで1なの?
補遺:わかりました。データベースでSQLを実行すると、行が削除されます。すべてのテストの前に、この目的のために保存したバックアップからデータベースを復元することに注意してください。今朝も昨日の午後も行が削除されていなかったことを誓います。はい、それはバックアップを復元した後でした。クレイジーな丸薬を使い果たして、今日の午後に問題を再検討します. うまくいけば、より明確な心で。