最干净的方法来确定是否存在一行?

时间:2012-06-14 17:38:22

标签: c# oracle dotconnect

这是一个简单的“记录存在”问题的最安全/最佳代码:

. . . // "oc" is an OracleConnection component
const string sql = "SELECT COUNT(*) FROM CONGRESS WHERE IQ > WEIGHT"; //Most politicians have more pounds than sense
try {
    using (OracleCommand ocmd = new OracleCommand(sql, oc)) {
        return Convert.ToInt32(ocmd.ExecuteScalar()) > 0;
    }
. . . // the rest elided to spare the vertical scroll-bar bearings

1 个答案:

答案 0 :(得分:3)

这样的东西
SELECT 1
  FROM dual
 WHERE EXISTS( SELECT 1
                 FROM congress
                WHERE iq > weight )

可能是最安全的选项,因为只要找到一个匹配的行,Oracle就会停止执行查询,而不是扫描整个表以获得准确的计数。像

这样的东西
SELECT COUNT(*) 
  FROM congress
 WHERE iq > weight
   AND rownum <= 1

也应该做同样的事情。在我看来,第一个查询更能表达你的意图,但它也有点冗长。