如何在 Transact-Sql 中模拟 Linq "First()" 函数

How to emulate the Linq "First()" function in Transact-Sql

我在存储过程中有一个查询,它执行了很多次,所以它需要尽可能高效(这只是参数化查询的一个具体示例,作为示例):

select @resultOUT = count(*) from samples where  <some criteria>

我的问题是计数 (*) 部分。我只需要知道 table 中是否有这样的行,据我了解,此查询将扫描整个 table(或索引)以计算匹配行的数量。

所以我需要的是 Linq First() 方法的 sql 等价物 - 即 "find the first matching row and then forget about the rest."

我该怎么做?我已经尝试使用 EXISTS 关键字,并且我将 运行 保留为语法困难,例如

   select @resultOUT = EXISTS (select somekeycolumn from samples where <somecriteria>)

描述了我想要的,但不正确。

谁能告诉我正确的道路?

顺便说一下,我也需要为 Oracle 做类似的事情。

TIA

有 EXISTS:

SELECT @resultOUT = CASE 
    WHEN EXISTS(select * from samples where <somecriteria>) THEN 1 
    ELSE 0 
    END

Oracle 会略有不同:

SELECT CASE WHEN EXISTS ( SELECT 1 FROM samples WHERE <somecriteria> ) THEN 1 ELSE 0 END
  INTO :result_out
  FROM dual;