这是一个简单的“记录存在”问题的最安全/最佳代码:
. . . // "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
答案 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
也应该做同样的事情。在我看来,第一个查询更能表达你的意图,但它也有点冗长。